Y&H MPPT TM-20A сонячна зарядка – реверс прошивки

MPPT сонячна зарядка TM-20A.

Нутрощі. CT350 2.5A MOSFET/IGBT Gate Driver Optocoupler, UTC UC3845G -HIGH PERFORMANCE CURRENT MODE PWM CONTROLLERS.

Процесор STM32F030C8T6.

Мосфети: DSN108N20N, MUR6030NCS, DSG040N10N3A, DH640.

Мосфет навантаження DH070N07

Індикатор, скоріш CS1621 і DC-DC USB портів.

Екран трохи слабо видно.

На звороті нічого немає цікавого, крім термодатчика.

Відключення акумулятора BMS’ом успішно переживає.

Даний екземпляр не зберігає користувацькі налаштування після перезавантаження по живленні, а також через деякий час сам перезавантажується і скидаються налаштування, проблема масова.

Зчитуємо прошивку (1 – 3,3; 2- SWDIO; 3 – GND; 4 – SWCLK), 64 кБ:

openocd -f interface/stlink.cfg -f target/stm32f0x.cfg -c init -c "reset halt" -c "flash read_bank 0 stm32f030_flash_dump.bin 0 0x10000" -c "reset" -c shutdown

Також можна зупинити процесор, і зчитати SRAM – оперативну пам’ять

openocd -f interface/stlink.cfg -f target/stm32f0x.cfg -c init -c "reset halt" -c "dump_image sram_dump.bin 0x20000000 0x2000" -c "reset" -c shutdown

Процесор STM32F0X не має постійної запам’ятовуючої  EEPROM, і не має зовнішньої i2c EEPROM, тому і налаштування не зберігаються.

Запускаємо дебаг через сокет:

openocd -f interface/stlink.cfg -f target/stm32f0x.cfg

І запускаємо GDB і підключаємося до сокета:

arm-none-eabi-gdb
target remote localhost:3333

Корисні функція для робіння всякого різного:

info registers
x/10i $pc
stepi
monitor reset halt
x/8xw 0x20000000
break *0x08001234
set {int}0x2000002C = 0x30202000

По адресації у процесорі:

0x08000000 флеш (аліас 0x00000000)
0x20000000 SRAM
0x40000000 регістри

Тепер можемо перезавантажувати мікроконтролер, робити зупинку, йти крок за кроком, запускати певну функцію.

(gdb) x/10i $pc
=> 0x80021e2: ldr r1, [pc, #8] ; (0x80021ec)
   0x80021e4: str r0, [r1, #0]
   0x80021e6: bx lr
   0x80021e8: add r2, sp, #680 ; 0x2a8
   0x80021ea: movs r0, r0
   0x80021ec: adds r0, #0
   0x80021ee: ands r0, r0
   0x80021f0: ldr r1, [pc, #4] ; (0x80021f8)
   0x80021f2: str r0, [r1, #4]
   0x80021f4: bx lr

Пристрій має 4 доступні налаштування, які виглядає не беруть участь у алгоритмі:

d01 - щось із добою
d02 - напруга підтримки 13,8 В
d03 - напруга фази заряду 14,5 В
d04 - перемикання на літій 0 / 1

При переведення d04==1 значення d02 і d03 стають однакові.

Імпортуємо прошивку у Гідру, ARM Cortex-M, LE, виставляємо правильне зміщення.

Находимо фрагмент (08003ec6) символів із помилками: 18, 60, 63, 65, 71, 73. Налаштувань (08001b3c), цікаво є ще d05 і d06.

Робота програми із регістрами:

0x40010000 TIM3_BASE Базова адреса таймера TIM3
0x40010414 TIM3_CCR1 Capture/Compare Register 1 (TIM3)
0x40020004 GPIOA_MODER Режим пінів порту A
0x40021000 RCC_CR Clock control register
0x40021004 RCC_CFGR Clock configuration register
0x40021008 RCC_CIR Clock interrupt register
0x40021010 RCC_APB2RSTR APB2 peripheral reset register
0x40021014 RCC_APB1RSTR APB1 peripheral reset register
0x40021018 RCC_AHBENR AHB peripheral clock enable
0x4002101C RCC_APB2ENR APB2 peripheral clock enable
0x4002102C RCC_BDCR Backup domain control register
0x40021030 RCC_CSR Control/status register
0x40021034 RCC_AHBRSTR AHB peripheral reset register
0x40022000 FLASH_ACR Flash access control register
0x4002200C FLASH_KEYR Flash key register (для розблокування)
0x40022010 FLASH_OPTKEYR Option byte key register
0x40022014 FLASH_SR Flash status register
0x40003000 USART1_SR UART1 статус регістр
0x40003008 USART1_DR UART1 Data Register

При підключенні 24 вольтової батареї значення d02 і d03 лишаються як для 12В, тому може то бутафорські змінні.

Наступні кроки: мапінг кнопок, підсвітки, екрану, дільників напруги входу, виходу, сили струму, додача ендпойнту на функцію зміни налаштувань, покроковий дебаг.

Інформація для цитування:

Юрій Р. 0009-0005-3702-9223. (2025). Y&H MPPT TM-20A сонячна зарядка – реверс прошивки. Блог UA ID. Взято з: https://blog.uaid.net.ua/mppt-tm-20a

Використання фотографій або текстового контенту на інших ресурсах без клікабельного індексованого посилання заборонено.