logo elektroda
logo elektroda
X
logo elektroda

Exploring A9 Minicam Variation: XF16 PB380EA6341 MCU, T25S80 SPI Flash, XR872, Skylark SDK

divadiow 33444 298
ADVERTISEMENT
  • #181 21547719
    divadiow
    Level 38  
    Posts: 4833
    Help: 420
    Rate: 851
    it appears perhaps many more cam sensors are supported looking at strings on an XF16

    Code: Text
    Log in, to see the code


    Added after 5 [hours] 2 [minutes]:

    insmod wrote:
    >>21349910 There is this: https://portrait.gitee.com/Dozingfiretruck/xr872_sdk/blob/master/project/example/jpeg/main.c
    But it looks like only for GC0308 and GC0328C sensors

    are these of any use? https://github.com/adasngle/testmywatch/tree/master/custom/drv/YUV_sensor
  • ADVERTISEMENT
  • Helpful post
    #182 21548014
    insmod
    Level 31  
    Posts: 1353
    Help: 160
    Rate: 425
    >>21547719
    Possibly. The most important things are initialization arrays, which they have.
  • Helpful post
    #184 21548497
    Apache02
    Level 7  
    Posts: 3
    Help: 1
    Rate: 3
    >>21548081
    Hi, the initialization table for the hi704 that I uploaded to GitHub was working. I had a working build for the BK7252 with this sensor on my previous SSD.
  • Helpful post
    #185 21548518
    divadiow
    Level 38  
    Posts: 4833
    Help: 420
    Rate: 851
    >>21548497 cool. ive just this minute discovered I have a HI0704 at my disposal

    https://www.elektroda.com/rtvforum/topic4121456.html#21548509

    Added after 5 [minutes]:

    neat. GC0310 too. pretty nice way of finally knowing what the cams are (if ribbon print isnt clear or boot log doesn't help), assuming theyre covered by the list above.

    Added after 1 [hours] 15 [minutes]:

    https://github.com/yandi-six/bk7258-doorbell/...dk-v2.0.1.29/components/bk_peripheral/src/dvp
  • ADVERTISEMENT
  • #186 21575396
    divadiow
    Level 38  
    Posts: 4833
    Help: 420
    Rate: 851
    @insmod @p.kaczmarek2

    I was thinking about tracing as many of the XF16 pins as possible against known components/functions, like RX/TX, LEDs. BUT, can what been seen in XR872 currently be relied on as a correct XR872 pin number to any extent? I'm thinking maybe not yet

    Screenshot of a configuration interface showing a list of pins and dropdown menus with editable value fields.
  • #187 21575844
    divadiow
    Level 38  
    Posts: 4833
    Help: 420
    Rate: 851
    work in progress
    Attachments:
    • Exploring A9 Minicam Variation: XF16 PB380EA6341 MCU, T25S80 SPI Flash, XR872, Skylark SDK tracings.jpg (5.02 MB) You must be logged in to download this attachment.
    • Exploring A9 Minicam Variation: XF16 PB380EA6341 MCU, T25S80 SPI Flash, XR872, Skylark SDK IMG_20250610_220654.jpg (3.21 MB) You must be logged in to download this attachment.
  • #188 21575973
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14388
    Help: 650
    Rate: 12308
    I think you'd probably need to add more entries here:
    https://github.com/openshwprojects/OpenBK7231T_App/blob/main/src/hal/xr809/hal_pins_xr809.c
    Check respective SDKs for what may be present and then check each pin one by one:
    Code: C / C++
    Log in, to see the code

    Check here:
    https://github.com/openshwprojects/OpenXR872/...343b51ba9/include/driver/chip/hal_gpio.h#L657
    There may be also port C:
    Code: C / C++
    Log in, to see the code

    
    ifeq ($(__CONFIG_CHIP_TYPE), xr872)
      __CONFIG_CHIP_ARCH_VER := 2
      __CONFIG_CHIP_XR872 := y
    ifeq ($(__CONFIG_CHIP_TYPE), xr808)
      __CONFIG_CHIP_ARCH_VER := 2
      __CONFIG_CHIP_XR808 := y
    CONFIG_SYMBOLS += -D__CONFIG_CHIP_ARCH_VER=$(__CONFIG_CHIP_ARCH_VER)
      ifndef __CONFIG_CHIP_ARCH_VER
    
    Helpful post? Buy me a coffee.
  • #189 21576922
    divadiow
    Level 38  
    Posts: 4833
    Help: 420
    Rate: 851
    gosh, thank you for taking the time to point these bits out. I'll try to get my head round what's required when I have a moment to focus
  • #190 21577064
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14388
    Help: 650
    Rate: 12308
    This seems to mean that there are at most:
    
    #define GPIOA_PIN_NUM    24
    #define GPIOB_PIN_NUM    22
    #define GPIOC_PIN_NUM    13
    

    24+22+13 pins to check, but usually not all are routed out on the case.
    Helpful post? Buy me a coffee.
  • #191 21580210
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14388
    Help: 650
    Rate: 12308
    You're getting XR809 and XR806 build errors because port C seems to be present only on XR872.
    Exploring A9 Minicam Variation: XF16 PB380EA6341 MCU, T25S80 SPI Flash, XR872, Skylark SDK
    Code: C / C++
    Log in, to see the code

    Probably just need to take PORTC pins into the #if PLATFORM_XR872 block
    Helpful post? Buy me a coffee.
  • #192 21580239
    divadiow
    Level 38  
    Posts: 4833
    Help: 420
    Rate: 851
    Ah ok. Thanks. It also looks like this in gui so I'm missing something else too. Need to get back to looking at it

    Exploring A9 Minicam Variation: XF16 PB380EA6341 MCU, T25S80 SPI Flash, XR872, Skylark SDK
  • #193 21580264
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14388
    Help: 650
    Rate: 12308
    There is also PLATFORM_GPIO_MAX in new_pins.h
    Helpful post? Buy me a coffee.
  • #195 21581384
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14388
    Help: 650
    Rate: 12308
    Well, it compiles, and you managed to configure it, so it's a good start, but I don't think @insmod meant that you should separate all HAL for your XR, just separate pins. It's easier to maintain single HAL file between multiple platforms.
    Helpful post? Buy me a coffee.
  • #196 21581497
    insmod
    Level 31  
    Posts: 1353
    Help: 160
    Rate: 425
    >>21581384
    No, i really meant to just separate pin definitions between all XRs.
    Or make it like i done with realtek, all shared code in hal_*_realtek.c, and anything chip-specific in its own folder.
    rtl87x0c/hal_pins_rtl87x0c.c for example contains only g_pins, g_numPins and HAL_PIN_CanThisPinBePWM.
  • ADVERTISEMENT
  • #197 21581680
    divadiow
    Level 38  
    Posts: 4833
    Help: 420
    Rate: 851
    :( ok ok. thanks. will come back to it probably. I need something more concrete to check pins against than the XF16 so have ordered this

    Exploring A9 Minicam Variation: XF16 PB380EA6341 MCU, T25S80 SPI Flash, XR872, Skylark SDK
    Exploring A9 Minicam Variation: XF16 PB380EA6341 MCU, T25S80 SPI Flash, XR872, Skylark SDK

    need to locate datasheet or trace though as it doesn't look like contacts are labelled. Alibaba/Tmall module

    Added after 7 [hours] 38 [minutes]:

    should this get merged first? https://github.com/openshwprojects/OpenXR872/pull/2

    I wonder if it would help with this size issue when more pins are set https://github.com/openshwprojects/OpenBK7231T_App/actions/runs/15688113310/job/44196324941

    Code: Text
    Log in, to see the code
  • #198 21582145
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14388
    Help: 650
    Rate: 12308
    I think I may need help on choosing which PR to merge. I remember we have @insmod PR pending but I wanted to try adding failsafe for BL602 OTA fail but failed to do so currently...

    Regarding this:
    https://github.com/openshwprojects/OpenBK7231T_App/pull/1676
    The cosmetic idea is nice, but this will break pin configs because they are saved as indexes.
    Helpful post? Buy me a coffee.
  • #199 21582148
    divadiow
    Level 38  
    Posts: 4833
    Help: 420
    Rate: 851
    p.kaczmarek2 wrote:
    The cosmetic idea is nice, but this will break pin configs because they are saved as indexes.

    arrgh
  • #200 21582151
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14388
    Help: 650
    Rate: 12308
    The sort still could be done, but it would have to done in http_fns.c (as far as I remember), in the cfg_pins handler.
    Helpful post? Buy me a coffee.
  • Helpful post
    #201 21582544
    insmod
    Level 31  
    Posts: 1353
    Help: 160
    Rate: 425
    I would've agreed if OTA was implemented. But since any update must be done via uart, might as well sort them in HALs.
    Should i add easyflash support to all XRs?

    Added after 1 [hours] 45 [minutes]:

    And there are 23 GPIO available according to XR809_Datasheet_V1.1.pdf, but only 13 are available in OBK.
  • ADVERTISEMENT
  • #202 21582637
    divadiow
    Level 38  
    Posts: 4833
    Help: 420
    Rate: 851
    XR needs some attention!
  • #203 21585440
    johndoudou
    Level 3  
    Posts: 5
    Hello everyone,

    This thread is awesome but I have some questions:
    - does someone know how to "slice cut" the flash dump into the different pieces that PhoenixMC is displaying? Is there an existing firmware parser? Binwalk does not get anything interesting.
    https://obrazki.elektroda.pl/7685058500_1744977818_bigthumb.jpg

    - did someone manage to start reverse-engineering the stock firmware? with Ghidra?
    I want to reverse engineer that cam in order to find all usable functions (for instance "store videos into SD card" etc.) that is not currently implemented by this project https://github.com/devbis/aiopppp

    - do you think you will soon be able to publish a toolchain that will allow coding a custom firmware and then flash it onto?

    By the way, attached, if it is useful, a dump from the flash: I have the A9 XF16 variation of that cam.

    Cheers!
    Attachments:
    • A9_spi_tj25Q08M_neo.bin (1 MB) You must be logged in to download this attachment.
  • #204 21585750
    divadiow
    Level 38  
    Posts: 4833
    Help: 420
    Rate: 851
    johndoudou wrote:
    - does someone know how to "slice cut" the flash dump into the different pieces that PhoenixMC is displaying?

    you could probably work it out from the partition layout code here
    https://github.com/openshwprojects/OpenXR872/...emo/hello_demo/image/xr872/image_auto_cal.cfg

    johndoudou wrote:
    did someone manage to start reverse-engineering the stock firmware? with Ghidra?


    not me

    johndoudou wrote:
    - do you think you will soon be able to publish a toolchain that will allow coding a custom firmware and then flash it onto?


    OpenXR872 is available for XF16 but it still requires a lot of work and does not support camera sensors. Is this what you mean?
    https://github.com/openshwprojects/OpenBK7231T_App/releases/

    Added after 1 [minutes]:

    johndoudou wrote:
    By the way, attached, if it is useful, a dump from the flash: I have the A9 XF16 variation of that cam.

    thanks. I'll add to collection. What does your device look like? Is it one we've seen before or new? Do you have pics of PCB both sides and cam module?
  • #205 21585757
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14388
    Help: 650
    Rate: 12308
    Partitions change dynamically with each build, so probably we would need to read the file. Maybe do few builds with different tables and check where the offsets are.
    Helpful post? Buy me a coffee.
  • #206 21586996
    johndoudou
    Level 3  
    Posts: 5
    >>21585750

    Thank you.

    My sample is the same as your post #121 in this current thread (https://www.elektroda.com/rtvforum/topic4074636-120.html#21530504)
    Bought here: https://aliexpress.com/item/1005006948283462.html


    Quote:
    Is this what you mean?

    And yes, it is what I meant.

    Added after 2 [minutes]:

    >>21585757

    Ah OK, do you know where could be, in the PhoenixMC SDK, the file/lib responsible for the format parser ?

    Does anyone has a clue on how to start reverse engineer the firmware in Ghidra ?
  • #208 21587062
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14388
    Help: 650
    Rate: 12308
    Cedarx? Interesting, but no:
    https://linux-sunxi.org/CedarX
    
    CedarX is a proprietary multimedia framework distributed by Allwinner and not supported by the linux-sunxi community.
    
    It's the name of the proprietary software libraries responsible for hardware accelerated video and audio de-/encoding (CedarV + CedarA) in conjunction with with a hardware block. As for audio, the hardware ACE (Audio Codec Engine) appears to only exist in A10 and older SoCs. Allwinner refactored their proprietary userspace libraries and published them partly under GPLv2 naming them "media-codec" while some codecs are still only available as proprietary binary blobs linked in like plugins.
    After some pressure caused by the controversies [1] [2] [3] [4] surrounding the license of this library, Allwinner released a new media-codec library called Sunxi-CedarX [5] , which is a rewrite that up to now only partial implements some codecs as open source, letting the rest of the codecs and features such an encoding dependents of a closed source plugin binary.
    


    @johndoudou what exactly do you want to find out with Ghidra?

    Added after 1 [minutes]:

    Do we even have Phoenix MC SDK? Source code of the flash tool?

    Added after 1 [minutes]:

    Image is created that way:
    
    E:\project\IOT\tools\xr-mkimage\Release>mkimage.exe
    

    so you would want mkimage source
    Helpful post? Buy me a coffee.
  • #209 21587069
    divadiow
    Level 38  
    Posts: 4833
    Help: 420
    Rate: 851
    p.kaczmarek2 wrote:
    Do we even have Phoenix MC SDK? Source code of the flash tool?

    ah. I forgot about the previous question then read this to mean the actual XR872 SDK :)

    Added after 45 [seconds]:

    I don't think I've ever seen the source code for PhoenixMC anywhere..
  • Helpful post
    #210 21587268
    insmod
    Level 31  
    Posts: 1353
    Help: 160
    Rate: 425
    Xradios update test
    LFS for all, Easyflash for all, OTA for all (XR809 not working, XR872 no image generated yet), Pins for all, berry for XR806.
    Implemented PWM, ADC (including VBAT), UART, watchdog in APP, delay_us, RSSI and ip addresses, remaining heap size.
    Fixed MAC for XR806.

    https://github.com/NonPIayerCharacter/OpenBK7231T_App/actions/runs/15826444795

    @divadiow need tests on XR806 (and if it even boots)

Topic summary

✨ The discussion focuses on a variation of the A9 mini Wi-Fi camera featuring the XF16 PB380EA6341 MCU, an 8Mbit SPI flash chip labeled T25S80 (likely from ChipSourceTek), and the XR872 SoC running the Skylark SDK. Attempts to read and dump the flash firmware using tools like Flashrom, NeoProgrammer, and ASProgrammer faced challenges due to unrecognized SPI IDs and unreliable read/write operations, especially when the flash chip was in-circuit. Desoldering the flash chip improved read/write reliability. The firmware strings indicate the use of an RTOS and the iLnkP2P protocol for communication. The XR872 SDK (version 2.0 and later 1.2.x) was explored for building and flashing demo applications, including a "hello world" example, which successfully booted on the hardware after flashing via UART using PhoenixMC. Flashing custom firmware requires careful handling of flash erase and protection bits, with some users experiencing verification errors and random write failures. The flash layout includes an AWIH header and OTA partitions, with OTA updates compressed by XZ, raising concerns about fitting OTA images into the 1MB flash. Hardware details such as the presence of a pull-up resistor on the flash hold pin and UART pin configurations (PB02/PB03) were examined. The community also discussed the compatibility of different flash chip sizes (1MB vs 2MB) and the impact on firmware booting and flashing. Some users successfully transplanted firmware to larger flash chips (2MB) to run custom firmware like OpenXR872 (OBK). The discussion includes references to related projects for video stream capture without flashing (cam-reverse) and the challenges of flashing and booting custom firmware on these devices. Overall, the thread provides detailed technical insights into hardware probing, firmware extraction, SDK usage, flashing procedures, and troubleshooting for the XF16-based A9 mini camera variant with XR872 SoC.
Generated by the language model.

FAQ

TL;DR: With 1MB stock flash, many XF16 A9 cameras can be dumped and restored over UART, and one contributor confirmed "OpenXR872 ... boots on 1mb flash" only after fixing the image layout. This FAQ helps XR872/XF16 camera owners back up firmware, understand AWIH partitions, fix PhoenixMC/UART issues, and avoid bad SPI-flash writes. [#21530564]

Why it matters: XF16 A9 cameras look identical externally, but small changes in flash size, OTA layout, console settings, and sensor wiring decide whether firmware boots, flashes, or bricks.

Method What works best Main strengths Main failure mode
PhoenixMC over UART Read/write on XF16/XR872 without opening some A9 units No desoldering; can restore stock dumps Custom builds may lose UART flashing after power cycle if console support is wrong
CH341A + SOIC8 clip Quick first dump attempts Cheap; widely available In-circuit reads often return bad IDs like 1313 or 8E8029
CH341A with desoldered flash Most reliable SPI backup/restore Stable verification; works with replacement chips Some flash chips still fail erase/write unless decoupling is added
Bus Pirate Usually poor choice here Can talk SPI/UART Backfeeds power and often fails chip detection

Key insight: The hardest XF16 problems were not caused by the XR872 core. They came from image layout, OTA header placement, console enablement, and fragile SPI flash behavior on specific 1MB chips.

Quick Facts

  • XF16 boot logs repeatedly report 240000000 Hz CPU, 40000000 Hz HF clock, and XRADIO Skylark SDK builds such as 1.2.0 Jun 20 2024 10:58:31 or 1.2.2 test builds, which makes the platform easy to fingerprint from UART alone. [#21219273]
  • The stock A9 XF16 camera flash is commonly 8 Mbit / 1 MB with IDs such as C74014 or 5E3214, while test replacements that booted OpenXR872 included 2 MB and even 64 Mbit chips. [#21522966]
  • UART flashing can work through the camera’s USB path on some XF16 A9 boards because RX/TX are routed through the USB connector traces; contributors built simple USB-TTL adapters from NodeMCU or CH340 hardware to exploit that. [#21528571]
  • The stock firmware exposes a local AP at 192.168.238.1/24, while OpenXR872 test builds used 192.168.51.1/24 or 192.168.4.1/24, so IP range alone can reveal whether you are in factory or custom firmware. [#21219273]
  • Confirmed XF16 camera-connector tracing mapped SDA/SCL to PA18/PA17, PCLK to PA08, MCLK to PA09, HSYNC to PA10, VSYNC to PA11, and DVP data lines across PA00–PA07. [#21732686]

How can I dump and restore firmware on an XF16 A9 minicam with a T25S80 or C74014 SPI flash chip using a CH341A, clip, or PhoenixMC over UART?

You can dump and restore XF16 firmware either over SPI or over UART. 1. For SPI, clip or desolder the 8-pin flash, then read it with a CH341A in NeoProgrammer, ASProgrammer, or EasyFlasher. 2. For UART, connect through the XF16 USB-routed RX/TX path and use PhoenixMC to read or flash without opening some cameras. 3. Always verify the dump and keep at least one known-good stock backup before testing OpenXR872. One contributor confirmed they clipped directly onto the flash and did not need reset mode first. [#21278253]

Why do some XF16 A9 cameras report strange SPI flash IDs like 1313, 8E8029, C74014, or 5E3214 when reading the flash in-circuit?

Those odd IDs usually mean the in-circuit SPI read is unstable, not that the chip is truly changing identity. The thread showed 1313, 8E8029, and then stable C74014 on the same 1MB camera, while a desoldered read later became consistent and verified correctly. Shared power rails, leakage from the rest of the board, bad clip contact, and marginal CH341A supply decoupling all caused false IDs. A clean off-board read or UART dump was much more trustworthy than an in-circuit first pass. [#21522287]

What is the AWIH header in XR872/XF16 firmware dumps, and how can it help identify image sections like boot, app, app_xip, and wlan_fw?

"AWIH is a firmware image header that marks XR/XF system images, stores image metadata, and helps separate boot, app, XIP, and WLAN sections." In this thread, contributors matched AWIH-tagged section IDs such as 0xa5ff5a00, 0xa5fe5a01, 0xa5fd5a02, 0xa5fa5a05, and 0xa5f95a06 to boot_40M.bin, app.bin, app_xip.bin, wlan_bl.bin, and wlan_fw.bin. Searching a dump for those little-endian markers was enough to start slicing it for Ghidra or manual comparison. [#21589985]

What is iLnkP2P on these A9 and PTZ cameras, and how is it related to the YSX/YSXLite apps and cam-reverse tools?

"iLnkP2P is a peer-to-peer camera transport protocol that carries control and media traffic, identifies devices with UIDs, and lets mobile apps reach cameras through local AP mode or relay servers." These XF16 and PTZ cameras logged IpcP2pStart, device rtuid, and p2pID, then worked with YSX or YSXLite. The same protocol is what cam-reverse and related reversing notes target, including video extraction and CGI-style control. Multiple posts linked the protocol directly to the apps and to the reverse-engineering workflow. [#21353025]

Why did OpenXR872 boot on a 2MB flash chip but initially fail on the stock 1MB flash chip in the XF16 A9 camera?

It failed because the early image layout still assumed space beyond the stock 1MB boundary. The same OpenXR872 image booted when the original dump was transplanted to a 2MB flash chip, but not on the original 1MB flash. That exposed a layout problem rather than a CPU or sensor problem. The boot logs showed image max size is invalid and missing XIP section errors on the 1MB setup, while the 2MB chip could tolerate the oversized placement. [#21525075]

How was the 1MB XF16 boot issue solved by changing the OpenXR872 image configuration and OTA header placement?

The fix was to shrink the effective image layout for 1MB flash and move the OTA header out of the failing location. First, contributors rebuilt with max_size around 880K. Later they proved that a no-OTA image booted on 1MB stock flash, then refined the layout so the OTA header sat at 1020K with 4K size instead of the breaking 1024K arrangement. After that, 1MB XF16 boards booted OpenXR872 normally. As one post put it, “ota was the problem.” [#21530564]

Why does UART flashing through PhoenixMC stop working on some OpenXR872 builds after a power cycle, and how was PRJCONF_CONSOLE_EN involved in fixing it?

UART flashing stopped because the custom build no longer exposed the console command path that PhoenixMC uses after reboot. The breakthrough was enabling #define PRJCONF_CONSOLE_EN 1, which restored the upgrade command path and made Open comm OK ! survive fresh power cycles on 1MB XF16 boards. Before that fix, some builds could still be reflashed only until RAM state was lost, which made the problem look random. After the console option was re-enabled, PhoenixMC download-mode entry became reliable again. [#21536774]

CH341A vs Bus Pirate vs PhoenixMC over UART — which works best for reading and flashing XF16/XR872 camera firmware, and what problems should I expect with each?

PhoenixMC over UART is the best day-to-day method on XF16 once stock firmware or a console-enabled OpenXR872 build is present. CH341A is best for first-rescue backups, off-board writes, and recovery when UART entry is gone. Bus Pirate was the worst performer here: users reported non-detection, backfeeding power, and brief LED power-up when clipped in. CH341A also had pitfalls, especially with sensitive 1MB chips, but it still worked reliably after desoldering or after adding extra capacitance. [#21352083]

How do I enter XR872/XF16 download mode over UART without grounding PB02 or PB03, and what commands does PhoenixMC actually send?

You do it by speaking the stock console protocol, not by forcing strap pins low. PhoenixMC sends the text command upgrade, then repeated U sync bytes; a receptive firmware answers with OK and a BROM response. Later reversing tied that behavior to the XR command handler where cmd_upgrade_exec() reboots with PRCM_CPUA_BOOT_FROM_SYS_UPDATE. That is why stock firmware and console-enabled OpenXR872 can enter download mode over UART without grounding PB02 or PB03 at all. [#21534886]

What does the XRADIO Skylark SDK boot log tell me about an XF16 camera, including CPU clock, flash mode, sensor detection, and network behavior?

The boot log gives you the board fingerprint in one place. It exposes flash mode like [FD I]: mode: 0x4, CPU at 240000000 Hz, HF clock at 40000000 Hz, SDK build date, MAC addresses, sensor probe results such as detect sp0828, and AP behavior such as 192.168.238.1 on stock firmware. It also shows whether the camera starts in AP mode, tries STA mode, fails SD mount, or enters iLnkP2P. For XF16 debugging, the UART log is the fastest way to identify variant, sensor, and failure stage. [#21219273]

How can I build XR872 SDK demos under WSL, and which toolchain and 32-bit libraries are needed to compile hello_demo or jpeg examples successfully?

Builds under WSL worked after installing the older ARM GCC toolchain plus missing 32-bit runtime libraries. The thread used gcc-arm-embedded 4.9-2015-q2-update, then fixed execution errors by installing libc6-i386, lib32z1, and lib32stdc++6. Without those, WSL reported missing loader errors even when the path was correct. Once the 32-bit compatibility packages were installed, make lib and example builds such as hello_demo started compiling normally. [#21522159]

Why do some SPI flash chips like TJ25Q08M, T25S80, or 25QH32CHIG fail erase/write verification in NeoProgrammer or EasyFlasher unless extra capacitance or special handling is used?

These chips appear unusually sensitive to supply stability during SPI writes. The thread documented random verify errors, partial writes, and false erases on desoldered chips until extra capacitance was added directly on the CH341A setup; after that, the same chip verified cleanly. One test with a 25QH32CHIG failed repeatedly, then passed once a capacitor was added across the supply. Some users also had to experiment with protection-register handling, but the strongest repeated fix was better decoupling on the programmer side. [#21709832]

How can I trace the 18-pin FFC camera connector on an XF16 A9 board to map SDA, SCL, DVP data pins, MCLK, HSYNC, VSYNC, and PCLK to XR872 GPIOs?

The cleanest method is continuity tracing plus a pin-toggle test firmware. On the confirmed XF16 A9 mapping, pin 2 is SDA on PA18, pin 3 is SCL on PA17, pin 13 is MCLK on PA09, pin 12 is HSYNC on PA10, pin 11 is VSYNC on PA11, pin 15 is PCLK on PA08, and DVP data runs from PA00–PA07. Contributors validated the map with an 18-pin FFC walker that pulsed each GPIO while a multimeter watched the connector. [#21732686]

Which camera sensors seem to be supported or referenced in XF16/XR872 firmware strings, and how can I start adapting drivers for parts like SP0828, GC0328C, GC0329, or HI0704?

The firmware strings reference many sensors, including ov9660, ov7740, sp2518, gc0310, gc0328, gc0329, hi0704, hi0708, and sp0828. Start by reusing initialization tables and SCCB/I2C setup from the closest supported driver, then confirm the actual sensor with ribbon markings or UART detection logs. For XF16 A9 specifically, sp0828 was repeatedly detected in stock logs, while separate posts confirmed useful initialization arrays existed for hi704-class parts. That makes driver adaptation a sensor-data problem more than a core XR872 problem. [#21547719]

How can I split or parse a stock XF16 firmware dump into PhoenixMC-style partitions for reverse engineering in Ghidra, and where does mkimage fit into that process?

Use the AWIH section markers and the XR image config as your map, then reverse from there. Search the dump for little-endian IDs like 005affa5, 015afea5, 025afda5, 055afaa5, and 065af9a5 to locate boot, app, app_xip, wlan_bl, and wlan_fw boundaries. The SDK’s mkimage.exe is the packer that assembles those partitions into one AWIH image, so it is the right binary to study if you want PhoenixMC-style slicing for Ghidra. The thread specifically identified mkimage.exe as the image-creation step. [#21587062]
Generated by the language model.
ADVERTISEMENT