Thursday work
- Set up a UART - either USB or TTLUART, mostly for debugging
- Set up rudimentary display drawing, even if it's just embedded-graphics with no optimization.
- Probably keep the line-at-a-time DMA, if I can swing it.
- One row (16x30 pix font) would take a little less than 4ms to draw in a blocking manner. This means I could get 25Hz at full-blast, probably constrain to 5Hz?
- I could trigger a line update every 20ms, which would give me 5Hz net update rate. This would leave 16ms (80%) CPU remaining for everything else. Minus font rendering time :p
- Figure out what the "option byte" is per character
- 4 bit fg color, 4 bit bg color. Where are these colors defined?
- Hope that the "every frame is 60Hz" is going to cause problems with my 5Hz real update rate
- Figure out what needs to be done to report scan codes to the OS. Or lie, and pretend to be the ATMega keyboard (over UART) for now.
- I probably want scan code set 1 from these docs
- Actually build a physical 743 keyboard + display
- Use a double-proto?
- Would limit to single rows, probably BYO ribbon header? Split top and bottom.
- Use a physical mount with 4x 2x6 breakouts on quarter-protos and fly-wires/ribbons to the main board?
- Would require BYO ribbon directly to the MCU board
- Needs:
- SPI pinout for display
- Row/Column pinout for keyboard
- Level shfted SPI for WS2812b
- UART pinout?
- "Expansion Port" pinout?
- Use a double-proto?
- Get a booting OS, even if it is 100% hot chip and lie
- linker script? Flash location?
- Get clocks and other misc interrupts set up
Cable pinouts
Options: 12, 8, 6. All 2xN.
- Display 2x6 - Half Proto Compat - SPI2 + 5 GPIO
- COPI
- GND
- CIPO
- GND
- SCK
- GND
- TFT CSn
- GND
- TFT D/C
- GND
- SD CSn
- Touch CSn
- Keyboard 2x6 - NOT Half-Proto Compatible! - 10 GPIO
- TODO: direct pinout? Also 5v0 and GND?
- Could skip pow/gnd if fulfilled by LED header (direct to dev board?)
- LED 2x3 (TODO: Make sure not backwards). Can be done with three common-columns. Quarter/Half Proto Compat
- GND
- GND
- N/C!
- DIN
- 5v0
- 5v0
- Debug 2x10 to eth to eth to fly wire
- See spreadsheet
- Expansion Header: 2x10 - Maybe?
- https://github.com/Neotron-Compute/Neotron-Common-Hardware#expansion
- WiFi Radio - Maybe? Needs at least 2x4
Rough Layout
^
o[ ]o | o[ e ]o
o[ ]o | o[ x s ]$----> SPI1
o[ xxxx ]o | o[ t p ]$----> I2C1
o[ >----12--]$-------|--. $[xx i ]o
o[ xxxxxx ]o | +--8----<
o[ ]o o[ prog ext ]o
---------------- o[ eth con disp ]o
o[ xxx xxx ]o o[ ]o
o[ v xxx ]o o[espi============]o
o[ | v ]o o[+i2c swd usb ]$----> USB-C
o[ | | ]o o[________________]o
o[ | | ]o
o[ 5 8 ]o o[ STM32H7 ]o
o[ | | ]o o[ sd ]$----> SD Card
o[ | | ]o o[ ============]o
o[ | '---]$---$[----v | ]o
o[ | ]o o[ v------' ]o
o[ | ]o o[ lvl ]o
o[ | ]o v
o[ '-------------]$-------'
o[ ]o
o[ ]o
o[ ]o
SWD
3v3 GND 5v0 GND
E3 E2 E0 E1
E5 E4 B8 B9
VB E6 B6 B7
NR C13 B4 B5
C1 C0 D7 B3
C3 C2 D5 D6
V+ GND D3 D4
A1 A0 D1 D2
A3 A2 C12 D0
A5 A4 C10 C11
A7 A6 A12 A15
C5 C4 A10 A11
B1 B0 A8 A9
E7 B2 C8 C9
E9 E8 C6 C7
E11 E10 D14 D15
E13 E12 D12 D13
E15 E14 D10 D11
B11 B10 D8 D9
5v0 3v3 B14 B15
GND GND B12 B13
SD USB
Keypad pins
______ ______
col | A1 A0 | col
______+ A3 A2 +......
SPI6 | A5 A4 |
______+ A7 A6 | row
row | C5 C4 |
______| B1 B0 |______
Edge Connector
1x10 - To Breakout
1 | A0
2 | A1
3 | A2
4 | A3
5 | A4
6 | A6
7 | C4
8 | C5
9 | B0
10 | B1
1x1 - To Level Shifter
1 | A5
Breakout
On Quarter Proto
TODO: Find something that matches display
| 1 2 |
| 3 4 |
| 5 6 |
| 7 8 |
| 9 10 |
| 11 12 |
+5V0 and GND
Display SPI
On-Board
TOUCH_CSn | D10 XXX | reserved
TFT_DC | D8 D9 | SD_CSN
SPI2_MISO | B14 B15 | SPI2_MOSI
TFT_CSn | B12 B13 | SPI2_SCK
Edge Connector
TODO: Double check pinout isn't backwards
2x6 Right Angle Pins
TODO: invert!
COPI | 1 2 | GND
CIPO | 3 4 | GND
SCK | 5 6 | GND
TFT_CSn | 7 8 | GND
TFT_D/C | 9 10 | GND
SD_CSn | 11 12 | Touch CSn
Expansion Port
On-Board
unused | E0 E1 | RESETn (exp out)
I2C1_SCL | B8 B9 | IRQn
reserved | xx B7 | I2C1_SDA
SPI1_MISO | B4 B5 | SPI1_CSn
SPI1_MOSI | D7 B3 | SPI1_SCK
Edge Connector
1x8 Right Angle Pins
TODO: Top? Up? Bottom? Down?
TODO: Leave extra rows for extra expansion ports?
I2C1_SCL | 1
RESETn | 2
IRQn | 3
I2C1_SDA | 4
SPI1_MISO | 5
SPI1_CSn | 6
SPI1_MOSI | 7
SPI1_SCK | 8
Breakout
TODO: Fixed expansion port addr? We'll only have one (for now)
https://github.com/Neotron-Compute/Neotron-Common-Hardware#expansion
SPI_COPI | 1 2 | GND
SPI_CIPO | 3 4 | GND
SPI_CLK | 5 6 | GND
~SPI_CS | 7 8 | ~IRQ
I2C_SDA | 9 10 | I2C_SCL
EEPROM_ADDR0 | 11 12 | EEPROM_ADDR1
EEPROM_ADDR2 | 13 14 | ~RESET
5V | 15 16 | 5V
3V3 | 17 18 | 3V3
GND | 19 20 | GND
Make sure to pin out QWIIC connectors too
NOTE: The "Large" feather would work for an expansion header
Debug UART
Add some GPIOs here?
UART4_TX | D1 xxx |
| xxx D0 | UART4_RX
GND | 1
TX | 2
RX | 3
Board Layout
Top Row
North West
SWD
=================
$ 5v0 GND $
# E0 E1 | RESETn (exp out) }
I2C1_SCL | B8 B9 | IRQn }
(CSn)QSPI - xB6x B7 | I2C1_SDA } To EXP
SPI1_MISO | ?B4? B5 | SPI1_CSn } 8
SPI1_MOSI | ?D7? ?B3? | SPI1_SCK }
# D5 ?D6? - SPI1 Flash CSn
# D3 xD4x - SD Card (SW)
UART4_TX | D1 xD2x - SD Card (CMD) } To UART
SD Card - xC12x D0 | UART4_RX } 2
SD Card - xC10x xC11x - SD Card
USB - xA12x A15 #
# A10 xA11x - USB
# A8 xA9x - USB (vbus)
SD Card - xC8x xC9x - SD Card
# C6 C7 #
# D14 D15 #
(IO1)QSPI - xD12x xD13x - QSPI (IO3)
TOUCH_CSn | D10 xD11x - QSPI (IO0) }
TFT_DC | D8 D9 | SD_CSN } To Display
SPI2_MISO | B14 B15 | SPI2_MOSI } Breakout
TFT_CSn | B12 B13 | SPI2_SCK } 7
=================
USB
North East
Top Top Row:
- 01..=08 - 8 eth pins
- 09..=10 - 2 dead pin
- 11..=18 - 8 exp pins
- 19..=20 - 2 dead pin
- 21..=23 - 3 UART pins
- 24 - 1 dead pins
- 25..=30 - 6 display pins (+inner row)
Bottom Row
South West
Camera Conn.
=================
$ 3v3 GND $
LED - xE3x xE2x - QSPI(IO2)
# E5 E4 #
$ VB E6 #
SWD_nRST | NR xC13x - Button
# C1 C0 #
# C3 C2 #
$ V+ GND $
COL2 | A1 A0 | COL1 }
COL4 | A3 A2 | COL3 } To Keyboard
spi6 sck - A5 A4 | ROW1 } Row/Scan +
ws2812 DO | A7 A6 | ROW2 } WS2812b
ROW4 | C5 C4 | ROW3 } 4 + 6 + 1
ROW6 | B1 B0 | ROW5 }
# E7 xB2x - QSPI(CLK)
# E9 E8 #
On-TFT - !E11! !E10! - On-TFT
On-TFT - !E13! !E12! - On-TFT
# E15 !E14! - On-TFT
# B11 B10 #
$ 5v0 3v3 $
$ GND GND $
=================
SD Card
South East
Bottom Bottom Row
- 4 Level Shifter pins
- 5 LED pins
Soldering Guide
======= =======
3v3 | GND | | 5v0 | GND
E3 | E2 | | E0 | E1
E5 | E4 | | B8 | B9
VB | E6 | | B6 | B7
NR | C13 | | B4 | B5
C1 | C0 | | D7 | B3
C3 | C2 | | D5 | D6
V+ | GND | | D3 | D4
! A1 A0 ! | D1 | D2
! A3 A2 ! | C12 | D0
x A5 x A4 ! | C10 | C11
| A7 | A6 ! | A12 | A15
! C5 C4 ! | A10 | A11
! B1 B0 ! | A8 | A9
E7 | B2 | | C8 | C9
E9 | E8 | | C6 | C7
E11 | E10 | | D14 | D15
E13 | E12 | | D12 | D13
E15 | E14 | | D10 | D11
B11 | B10 | | D8 | D9
5v0 | 3v3 | | B14 | B15
| GND | GND | | B12 | B13
======= =======
Battery Powering
So, this board wasn't SUPER designed to be powered by a battery.
I think the easiest way to mod it would be to:
- rip up
U2
- the 3v3 reg- This is the 5-pin IC in the PWR cluster
- provide a 3v3 rail via the header
- rip up D10
- This is the diode at the "top" of the power cluster, above the LED
- Cut the far side, desolder the close side to preserve the pad
- bodge
VBUS
to battery charger- Right side of the diode (closest to the USB port)
- Provide
VMax
to +5v
The other option would be to provide my own USB-C connector, and connect the lines via header pins