Acer Aspire Switch 10 Keyboard Matrix

I have a keyboard salvaged from an Acer Aspire Switch 10, and wired up a Raspberry Pi Pico microcontroller with the goal of running “Key Matrix Whisperer“. A CircuitPython program published by Adafruit to help automate the task of probing an unknown keyboard matrix.

To minimize confusion, I lined up pin numbers as much as I can between the keyboard FPC (flexible printed circuit) cable adapter and Pi Pico pin numbers. Adapter pin1 connected to Pi Pico pin GP1, adapter pin 2 to Pico pin GP2, etc. This worked up until pin 22. Because the Pico didn’t expose GP23 or GP24, adapter pin 23 was connected to the next available pin GP26 a.k.a. ADC0 a.k.a. A0 and adapter 24 went to GP27 a.k.a. A1. After creating my wiring harness I plugged it in and ran Key Matrix Whisperer. It worked exactly as advertised listing a pair of pins every time I held down a key.

I printed out a lightened grayscale picture of the keyboard so I can write pin numbers directly on each key. After iterating through all the keys, I learned this keyboard’s 24 wires are used in a 8×16 matrix for a maximum of 128 possible combinations. There were only 83 keys on this keyboard leaving 45 combinations unused. It feels rather inefficient to set up a matrix and use only ~2/3 of possible combinations. Perhaps this keyboard design is a simplified counterpart of a full keyboard that included a numeric keypad and other keys?

I ran Key Matrix Whisperer twice, and all but one key matched up on both runs. Number key 9 reported as 12+22 on my first pass but 6+15 on my second pass. Reviewing the chart, I see 12+22 is the Windows key. I must have accidentally pressed Windows while reaching for 9 on my first pass, and Key Matrix Whisperer registered the Windows key instead of my intended 9. I’m glad I went through a second confirmation pass and caught this mistake.

I don’t know of any keyboard matrix domain specific conventions on which set of pins are rows and which set are columns. By English language convention, columns are laid out left-right and rows are laid out top-bottom. But looking at this particular keyboard matrix, I didn’t notice any particular association between the pins and their physical locations, they seem to be all over the place. For example, pin 1 connects to the up and down arrows which are physically located in the lower right corner. Pin 1 also connects to the Escape key, which is diagonally opposite on the upper left corner. Absent any further understanding of how this matrix was formed, I decided the smaller set of 8 pins are columns for my own convenience: a matrix table that is narrower than it is tall (“portrait” and not “landscape”) is easier to fit here before I put this matrix table to work:

Pin1213141516171819
1UpDownEscape
2BackspaceDel]Enter
3Page Up\Page Down
4PrtSc
SysRq
Ins=[.C
5Pause
Break
LM,SpaceLeft
6F12F119KJNO
7F10F987IHBU
8F8F76TGVY
9F6F55EDFR
10F4F334SRightW
11F2F112AZXQ
20Shift
(Left)
/Shift
(Right)
21Control0
22WindowP
23;Alt Gr
(Right)
Alt
(Left)
24~TabCaps LockMenuFn

Leave a comment