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