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.
  • 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?
  • 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
    1. COPI
    2. GND
    3. CIPO
    4. GND
    5. SCK
    6. GND
    7. TFT CSn
    8. GND
    9. TFT D/C
    10. GND
    11. SD CSn
    12. 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
    1. GND
    2. GND
    3. N/C!
    4. DIN
    5. 5v0
    6. 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