The latest boards turned up a couple of days ago - as always JLCPCB did a great job (and no, they're not paying me to say that). They're practically the same as the last revision, except for the 14 pin header that replaces the previous 12-pin header for the front-panel connector, after moving the NFC card reader from I2C to SPI. As part of the update boards, I designed a small logo to be embedded into the copper pour on the boards, which turned out even better than I had expected:
But I'm sure you're not as interested in the aesthetics of my PCB design as much as whether they actually work. The parts were already here so I started populating the boards. Having an SMT stencil really makes things much easier. I already know the design works, so I populated all of the SMT parts rather than doing them a section at a time. When it came to the DAC I was crossing my fingers - this must be the sixth time this particular IC has been soldered! I powered it all up, employing my usual I-hope-this-doesn't-explode wince and it was uneventful. That's usually a good sign... I checked all the major voltages, then plugged an FTDI connector to the ESP's header - a serial connection showed all was fine. I uploaded a basic firmware package that simply plays all songs on the SD card and tried it out (using loose connections pressed to a headphone jack) - I got sound! So the main board seemed to be working just fine.
Populated main board with the transformer in place for testing
Next I populated the front panel board. I decided this was going to be it - this one was going to work - so I populated every component, including the irreplaceable eMQ connector that I had to remove from the original top panel. The depth between the front plastics and the PCB isn't huge - to fit the NFC reader and the display into the gap I'm having to use short header connections, Samtec's TLW and CES models. They save enough depth for the front plastics into place but, because they're shorter, the ATtiny must be soldered directly to the board as it sits behind the display.
Populated front panel, notice the ATtiny poking out from under the display
I uploaded updated development firmware for the project, switched the NFC reader to SPI, connected the front panel to the main board and powered up the unit. The screen lit up! Pressing buttons gave me output to the serial, so the button controller was working, and the NFC reader works! Now I just have to make a small cutout for the SD card in the original case so I can mount the PCBs back in again. I won't be closing it up any time soon - I need access to the serial port on the main board so I can upload new versions as I finish the development work on the firmware. That's probably the one hardware change I would make; I would have added a USB-to-serial chip (UART) to the main board with a USB port coming out next to the SD card slot. This would have allowed me to upload new firmware with just a USB port instead of needing access to the board to upload/test new firmware. I'll probably do something over WiFi, but that's a pain for development purposes.
On the software side, there's still a long list of firmware features. I've been stalled on development as I couldn't get any further until the NFC reader and button controller were working together. I've also discovered a bug in the button controller firmware that I'll have to address where some buttons are issuing strange I2C messages, but the front panel board has a built-in ICSP connector so I can reprogram the ATtiny without needing to take the unit apart.
Building this hardware has been challenging but fun - I'm really pleased it's working, but I'm a little sad it's finished! I'll get to work on the software parts and post an update soon. There's plenty of small stuff to get on with, but the major components are all there. I have a list of "advanced" features as long as my arm so let's see how many I can get done!