[{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/002/217/original/front_back.jpg?1768231596","metadata":{}},{"element_type":"markdown","content":"\u003ch3\u003eESP32 Pinouts\u003c/h3\u003e\n\n\u003ctable\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth\u003eESP32 Pin\u003c/th\u003e\n\u003cth\u003eConnection\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e---LEFT SIDE---\u003c/td\u003e\n\u003ctd\u003e---\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eGND\u003c/td\u003e\n\u003ctd\u003ePROGRAM HEADER, 5\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e3V3\u003c/td\u003e\n\u003ctd\u003eT67\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eEN\u003c/td\u003e\n\u003ctd\u003ePROGRAM HEADER, 2\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSENSOR_VP / IO36\u003c/td\u003e\n\u003ctd\u003eENC2_A\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSENSOR_VN / IO39\u003c/td\u003e\n\u003ctd\u003eENC1_A\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eIO34\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eIO35\u003c/td\u003e\n\u003ctd\u003eENC1_B\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eIO32\u003c/td\u003e\n\u003ctd\u003eUART\u003cem\u003eRX / IRQ\u003c/em\u003eIN CR95HF\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eIO33\u003c/td\u003e\n\u003ctd\u003eUART\u003cem\u003eTX / IRQ\u003c/em\u003eOUT CR95HF\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eIO25\u003c/td\u003e\n\u003ctd\u003eSCL\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eIO26\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eIO27\u003c/td\u003e\n\u003ctd\u003eENC2_B\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eIO14\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eIO12\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eGND\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eIO13\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eNC\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eNC\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eNC\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e---RIGHT SIDE---\u003c/td\u003e\n\u003ctd\u003e---\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eGND\u003c/td\u003e\n\u003ctd\u003eGND\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eIO23\u003c/td\u003e\n\u003ctd\u003eDISPLAY - TOP ROW, PIN 5 (?SPI)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eIO22\u003c/td\u003e\n\u003ctd\u003eDISPLAY - BOTTOM ROW, PIN 5 (?SPI)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eTXD0\u003c/td\u003e\n\u003ctd\u003ePROGRAM HEADER, 3\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eRXD0\u003c/td\u003e\n\u003ctd\u003ePROGRAM HEADER, 4\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eIO21\u003c/td\u003e\n\u003ctd\u003eSDA\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eNC\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eIO19\u003c/td\u003e\n\u003ctd\u003eI2S_DIN\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eIO18\u003c/td\u003e\n\u003ctd\u003eI2S_WS\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eIO5\u003c/td\u003e\n\u003ctd\u003eI2S_BCLK\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eNC\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eNC\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eIO4\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eIO0\u003c/td\u003e\n\u003ctd\u003ePROGRAM HEADER, 1\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eIO2\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eIO15\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eNC\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eNC\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eNC\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n","metadata":{"markdown":"### ESP32 Pinouts\n\n| ESP32 Pin    | Connection |\n| -------- | ------- |\n| ---LEFT SIDE--- | --- |\n| GND  | PROGRAM HEADER, 5    |\n| 3V3 | T67     |\n| EN    | PROGRAM HEADER, 2    |\n| SENSOR_VP / IO36  | ENC2_A    |\n| SENSOR_VN / IO39 | ENC1_A     |\n| IO34    |     |\n| IO35  | ENC1_B    |\n| IO32 | UART_RX / IRQ_IN CR95HF     |\n| IO33 | UART_TX / IRQ_OUT CR95HF     |\n| IO25  | SCL    |\n| IO26 |      |\n| IO27  | ENC2_B    |\n| IO14  |     |\n| IO12 |      |\n| GND    |     |\n| IO13  |    |\n| NC    |     |\n| NC  |    |\n| NC  |    |\n| ---RIGHT SIDE--- | --- |\n| GND |  GND   |\n| IO23  | DISPLAY - TOP ROW, PIN 5 (?SPI)   |\n| IO22  | DISPLAY - BOTTOM ROW, PIN 5 (?SPI)   |\n| TXD0 | PROGRAM HEADER, 3      |\n| RXD0 | PROGRAM HEADER, 4     |\n| IO21  | SDA   |\n| NC |      |\n| IO19  | I2S_DIN    |\n| IO18  | I2S_WS    |\n| IO5 | I2S_BCLK     |\n| NC    |     |\n| NC  |    |\n| IO4 |      |\n| IO0  | PROGRAM HEADER, 1    |\n| IO2  |     |\n| IO15 |      |\n| NC    |     |\n| NC  |    |\n| NC  |    |"}},{"element_type":"markdown","content":"\u003ch3\u003eButton Test Points\u003c/h3\u003e\n\n\u003ctable\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth\u003eSwitch\u003c/th\u003e\n\u003cth\u003eTest Point\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003ePower Button\u003c/td\u003e\n\u003ctd\u003eTP77 / Battery charger nQON\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eENC1 Button\u003c/td\u003e\n\u003ctd\u003eT8\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eENC2 Button\u003c/td\u003e\n\u003ctd\u003eT19\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003cp\u003eEncoder buttons are connected to the IO expander (P0\u003cem\u003e5: left, P0\u003c/em\u003e4: right). Power button is connected to the battery charging IC \u003c/p\u003e\n","metadata":{"markdown":"### Button Test Points\n\n| Switch    | Test Point |\n| -------- | ------- |\n| Power Button  | TP77 / Battery charger nQON  |\n| ENC1 Button | T8     |\n| ENC2 Button    | T19    |\n\nEncoder buttons are connected to the IO expander (P0_5: left, P0_4: right). Power button is connected to the battery charging IC \n"}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/002/216/original/buttonTestPoints.jpg?1768231334","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch2\u003ePeripherals\u003c/h2\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch3\u003eRFID Reader\u003c/h3\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/002/211/original/cr95hf_rfid.jpg?1768230254","metadata":{}},{"element_type":"text","content":"\n        \u003cp\u003eCR95HF RFID Reader. Connected via UART. (SSI_0 and SSI_1 are tied to GND).\u003c/p\u003e\n\u003cp\u003eUART init:\u003c/p\u003e\n      ","metadata":{}},{"element_type":"code","content":"uart = busio.UART(\n    board.D32,\n    board.D33,\n    baudrate=57600,\n    bits=8,\n    stop=2,\n    timeout=0.1\n)","metadata":{"language":"python","linenums":false,"filename":""}},{"element_type":"button","content":"https://www.st.com/content/ccc/resource/technical/document/datasheet/d2/cc/cb/f6/7c/63/48/75/DM00025644.pdf/files/DM00025644.pdf/jcr:content/translations/en.DM00025644.pdf","metadata":{"button_type":"info","icon":"info","target":"_blank","zip_folder":"false"}},{"element_type":"button","content":"https://github.com/BlitzCityDIY/CircuitPython_CR95HF","metadata":{"button_type":"pink","icon":"bolt","target":"_blank","zip_folder":"false"}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch3\u003eReal Time Clock (RTC)\u003c/h3\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/002/225/original/rtc.jpg?1768422636","metadata":{}},{"element_type":"text","content":"\n        \u003cp\u003ePCF8563 RTC module.\u003c/p\u003e\n\u003cp\u003eI2C Address: \u003cstrong\u003e0x51\u003c/strong\u003e\u003c/p\u003e\n      ","metadata":{}},{"element_type":"button","content":"https://www.nxp.com/docs/en/data-sheet/PCF8563.pdf","metadata":{"button_type":"info","icon":"info","target":"_blank","zip_folder":"false"}},{"element_type":"button","content":"https://github.com/adafruit/Adafruit_CircuitPython_PCF8563","metadata":{"host":"github.com","owner":"adafruit","repository":"Adafruit_CircuitPython_PCF8563","button_type":"pink","icon":"bolt","target":"_blank","zip_folder":"false","zip_generated_at":null}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch3\u003eeMMC Flash\u003c/h3\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/002/212/original/emmc_flash.jpg?1768230374","metadata":{}},{"element_type":"button","content":"https://www.silicongo.com/product-detail/i-11.html?lang=en","metadata":{"button_type":"info","icon":"info","target":"_blank","zip_folder":"false"}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch3\u003eI2S DAC\u003c/h3\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/002/213/original/i2s_dac.jpg?1768230486","metadata":{}},{"element_type":"text","content":"\n        \u003cp\u003e\u003cstrong\u003eI2C address: 0x08\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eI2C configurable.\u0026nbsp;Some links for software/use in other hardware:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://www.waveshare.com/wiki/Audio_Driver_HAT?srsltid=AfmBOop9xywv9soyjRxcmmxKEikbPxJIlWM7gnyBBPdCOa7ylfHfg_WT\"\u003ehttps://www.waveshare.com/wiki/Audio_Driver_HAT?srsltid=AfmBOop9xywv9soyjRxcmmxKEikbPxJIlWM7gnyBBPdCOa7ylfHfg_WT\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://components.espressif.com/components/espressif/esp_codec_dev/versions/1.2.0?language=en\"\u003ehttps://components.espressif.com/components/espressif/esp_codec_dev/versions/1.2.0?language=en\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMIT licensed ESP IDF driver: \u003ca href=\"https://github.com/Nicolai-Electronics/esp32-component-es8156\"\u003ehttps://github.com/Nicolai-Electronics/esp32-component-es8156\u003c/a\u003e\u0026nbsp;\u003c/li\u003e\n\u003c/ul\u003e\n      ","metadata":{}},{"element_type":"button","content":"https://github.com/BlitzCityDIY/CircuitPython_ES8156","metadata":{"button_type":"pink","icon":"star","target":"_blank","zip_folder":"false"}},{"element_type":"button","content":"https://www.lcsc.com/datasheet/C2887138.pdf","metadata":{"button_type":"info","icon":"info","target":"_blank","zip_folder":"false"}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch3\u003eSpeaker Amplifier\u003c/h3\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/002/224/original/AW88194.jpg?1768421873","metadata":{}},{"element_type":"text","content":"\n        \u003cp\u003eI2C address: \u003cstrong\u003e0x64\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eThis was hard to figure out! I assumed this was a radio module based on search results from the chip markings and the fact that it was a castellated pads module. While tracing the speaker pads, the module had continuity with it and an\u0026nbsp;\u003ccode\u003eaw881xx\u003c/code\u003e was mentioned in \u003ca href=\"https://us.yotoplay.com/legal/third-party-licenses\" target=\"_blank\"\u003e3rd party licenses on the Yoto site\u003c/a\u003e and in the \u003cstrong\u003e.ELF\u003c/strong\u003e file dump from the default firmware. When you search for that though, nothing really comes up and the Awinic website is unreachable. Finally found it by searching for Awinic parts on LCSC. Chip markings match.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://www.lcsc.com/product-detail/C5162541.html\" target=\"_blank\"\u003eLCSC part\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.lcsc.com/datasheet/C5162541.pdf\" target=\"_blank\"\u003eDatasheet\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eHave not been able to get it to work in CircuitPython. Did get an \u003ca href=\"https://github.com/BlitzCityDIY/CircuitPython_Yoto_Mini/blob/main/playground_files/boot_i2c.txt\" target=\"_blank\"\u003eI2C readout from the factory firmware during boot\u003c/a\u003e to try and determine correct init sequence.\u003c/p\u003e\n      ","metadata":{}},{"element_type":"button","content":"https://www.lcsc.com/datasheet/C5162541.pdf","metadata":{"button_type":"info","icon":"info","target":"_blank","zip_folder":"false"}},{"element_type":"text","content":"\n  \n  \n  \n  \n        \u003ch3\u003eBattery Charger\u003c/h3\u003e\n      \n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/002/214/original/sgm41513_batCharger.jpg?1768230786","metadata":{}},{"element_type":"text","content":"\n        \u003cp\u003e\u003cstrong\u003eI2C Address: 0x1A\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eThe factory firmware powers up the player by holding down the side button. That button is connected to the \u003cstrong\u003enQON\u003c/strong\u003e pin on the SGM41513. When you press the button, hardware automatically enables BATFET, powering up the device.\u003c/p\u003e\n      ","metadata":{}},{"element_type":"button","content":"https://www.sg-micro.com/rect/assets/58a4fe4d-da1d-49a3-b312-5664211d9016/SGM41513_SGM41513A_SGM41513D.pdf?access_token=JB0xlRQ-10F_vQg1XXqsnx8zy4iF65LO","metadata":{"button_type":"info","icon":"info","target":"_self","zip_folder":"false"}},{"element_type":"button","content":"https://github.com/BlitzCityDIY/CircuitPython_SGM41513","metadata":{"button_type":"pink","icon":"bolt","target":"_blank","zip_folder":"false"}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch3\u003eIO Expander\u003c/h3\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/002/215/original/tcal6416_ioexpander.jpg?1768231230","metadata":{}},{"element_type":"text","content":"\n        \u003cp\u003e\u003cstrong\u003eI2C Address: 0x20\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eThis I'm not 100% sure on because a search for the markings weren't bringing up anything (\"6416 AM830\"). Didn't see anything else that was an IO expander though, so added that and the TCAL6416 came up. Will hopefully be able to confirm after an I2C scan.\u003c/p\u003e\n      ","metadata":{}},{"element_type":"button","content":"https://www.ti.com/lit/ds/symlink/tcal6416.pdf","metadata":{"button_type":"info","icon":"info","target":"_blank","zip_folder":"false"}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch2\u003eESPTool Output\u003c/h2\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"code","content":"esptool.py -p COM34 read_flash 0 ALL yoto_mini_v2.bin","metadata":{"language":"terminal","linenums":false,"filename":""}},{"element_type":"code","content":"Detecting chip type... ESP32\nChip is ESP32-D0WD-V3 (revision v3.1)\nFeatures: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None\nCrystal is 40MHz\nMAC: 78:1c:3c:e7:48:50\nUploading stub...\nRunning stub...\nStub running...\nConfiguring flash size...\nDetected flash size: 8MB\n8388608 (100 %)\n8388608 (100 %)\nRead 8388608 bytes at 0x00000000 in 786.3 seconds (85.3 kbit/s)...\nHard resetting via RTS pin...","metadata":{"language":"terminal","linenums":false,"filename":""}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch2\u003eCircuitPython\u003c/h2\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"button","content":"https://github.com/BlitzCityDIY/CircuitPython_Yoto_Mini","metadata":{"button_type":"pink","icon":"bolt","target":"_blank","zip_folder":"false"}},{"element_type":"button","content":"https://github.com/BlitzCityDIY/CircuitPython_Yoto_Mini/raw/main/playground_files/adafruit-circuitpython-yoto_mini-en_US-20260114-yoto_mini-b0f20cc.bin","metadata":{"button_type":"purple","icon":"download","target":"_blank","zip_folder":"false"}},{"element_type":"button","content":"https://github.com/tannewt/circuitpython/tree/yoto","metadata":{"button_type":"purple","icon":"star","target":"_blank","zip_folder":"false"}},{"element_type":"code","content":"Adafruit CircuitPython 10.1.0-beta.1-28-g6206c9d57c on 2026-01-12; Yoto Mini with ESP32\nBoard ID:yoto_mini\nUID:87C1C37E8405\nMAC:E0:04:FD:3F:D0:42\n\nAuto-reload is on. Simply save files over USB to run them or enter REPL to disable.\ncode.py output:\nHello World!\n\nCode done running.","metadata":{"language":"terminal","linenums":false,"filename":""}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch3\u003eEnable Web Workflow via REPL\u003c/h3\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"code","content":"with open('settings.toml', 'w') as f:\n    f.write('CIRCUITPY_WIFI_SSID = \"ssid_here\"\\n')\n    f.write('CIRCUITPY_WIFI_PASSWORD = \"ssid_password_here\"\\n')\n    f.write('CIRCUITPY_WEB_API_PASSWORD = \"passw0rd\"\\n')\n\nprint(open('settings.toml').read())\n\nimport microcontroller\nmicrocontroller.reset()","metadata":{"language":"terminal","linenums":false,"filename":""}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/002/219/original/Screenshot_2026-01-12_170512.png?1768255645","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch3\u003eI2C Scan\u003c/h3\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"code","content":"Auto-reload is on. Simply save files over USB to run them or enter REPL to disable.\ncode.py output:\nChecking board.I2C()...ADDED.\nChecking board.STEMMA_I2C()...SKIPPED: 'module' object has no attribute 'STEMMA_I2C'\nChecking busio.I2C(board.GP1, board.GP0)...SKIPPED: 'module' object has no attribute 'GP1'\n----------------------------------------\nI2C SCAN\n----------------------------------------\nboard.I2C() addresses found: ['0x8', '0x18', '0x1a', '0x20', '0x51', '0x64']","metadata":{"language":"terminal","linenums":false,"filename":""}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n        \u003cp\u003eEverything is accounted for except \u003cstrong\u003e0x18\u003c/strong\u003e..\u003c/p\u003e\n      \n\n\n\n\n\n\n","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n        \u003ch2\u003eI2C Output During Boot\u003c/h2\u003e\n\u003cp\u003evia Bus Pirate\u003c/p\u003e\n      \n\n\n\n\n\n","metadata":{}},{"element_type":"embed","content":"https://github.com/BlitzCityDIY/CircuitPython_Yoto_Mini/blob/main/playground_files/boot_i2c.txt"},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch2\u003eResearch Links\u003c/h2\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"button","content":"https://yackorder.org/yoto/guides/dumping_the_esp32_firmware_on_a_yoto_mini_v2_2023/","metadata":{"button_type":"warning","icon":"bolt","target":"_blank","zip_folder":"false"}},{"element_type":"button","content":"https://github.com/BlitzCityDIY/CircuitPython_Yoto_Mini/raw/main/playground_files/yoto_mini_factory.bin","metadata":{"button_type":"purple","icon":"download","target":"_blank","zip_folder":"false"}}]