RTL871xBx Tools (Ameba Z)

pvvx

Активный участник сообщества
Последняя версия утилиты 'RTLTool.py' из данной темы:
RTL871xBx ROM Bootloader Utility Ver 12.01.2018
Код:
>python.exe rtltool.py -h
usage: rtlptool [-h] [--port PORT] {rf,wf,wm,es,gf,sf,bf} ...

RT871xBx ROM Bootloader Utility

positional arguments:
  {rf,wf,wm,es,gf,sf,bf}
                        Run rtlptool {command} -h for additional help
    rf                  Read Flash data to binary file
    wf                  Write a binary file to Flash data
    wm                  Write a binary file to SRAM memory
    es                  Erase Sectors Flash
    gf                  Get Flash Status register
    sf                  Set Flash Status register
    bf                  Start boot flash

optional arguments:
  -h, --help            show this help message and exit
  --port PORT, -p PORT  Serial port device

>python.exe rtltool.py rf -h
usage: rtlptool rf [-h] address size filename

positional arguments:
  address     Start address
  size        Size of region
  filename    Name of binary file

>python.exe rtltool.py wf -h
usage: rtlptool wf [-h] address filename

positional arguments:
  address     Start address
  filename    Name of binary file
...
Для старта модуля в режиме UART_DOWNLOAD требуется замкнуть RESET на GND и затем притянуть TX (GPIOA30) на GND, отпустить RESET и затем TX.

Добавлена и RtlImage.py для сборки бинарников из ELF файла (версия 17.01.18).

Странслировать утилиты из питона в *.exe можно путем:
rem pip install wheel
rem pip install pyinstaller
pyinstaller -c --onedir --onefile -n rtltool rtltool.py
pyinstaller -c --onedir --onefile -n rtlimage rtlimage.py
 

Вложения

Последнее редактирование:

pvvx

Активный участник сообщества
Для затравки - читалка-писалка FullFlash по UART (1500000 Baud).
Снимок1630.gif
На плате отладчика c UART-USB CH430 и модулем RTL8710BN (типа MJIOT-AMB-03-DEBUG) нажимаем две кнопочки RST и FLASH, RST отпускаем и считываем программой Flash (2МБ).
---
Программа обновлена 4 окт 2017...
 

Вложения

Последнее редактирование:

pvvx

Активный участник сообщества
Дубль из другой темы о формате работы по UART (кратко - кто хочет, тот пусть расписывает):
Если нажать кнопку FLASH и стартануть RESET, то:
Посмотреть вложение 4724
sdk40b: "doc\UM0112 Realtek Ameba-Z SDK quick start.pdf"
Получаем, как в ESP8266 - загрузку по UART...
Скорость по умолчанию фиксирована - 1500000 Baud, но есть команда переключения.
В принципе, менять не стоит, т.к. CH430 как раз тянет эти 1.5Mbit/s, а другие, большие скорости с ней не стыкуются.
.....
Кратко:
1) Формат аналогичен xmodem:
SOH 0x01 Start of Header, начало заголовка (блок 4+128 байт - это отличие от стандарта)
SOH 0x02 Start of Header, начало заголовка (блок 4+1024 байт - это отличие от стандарта)
EOT 0x04 End of Transmission, конец передачи.
ACK 0x06 Acknowledge, положительное подтверждение.
NAK 0x15 Not Acknowledge, отрицательное подтверждение.

2) Модуль передает 0x15 и ждет команды...

2.1) Сначала отрабатывает xModemHandshake(), в ней команды:
0x05, x - UART Set Baud Nx (номера по таблице)
0x07 - End (выход в режим загрузки/записи Flash/RAM)
0x17, a0,a1,a2, s0,s1 - Erase Flash Sectors
0x19, a0,a1,a2, s0,s1, ... 0x06 - Read block Flash
0x21 - FLASH Get Status
0x26, xx - FLASH Set Status

3) После подачи 0x07 - End, переходит в режим записи.
Принимаемые коды в xModemGetFirst():
0x1B - Aborted (ret 7)
0x01 - блок данных 132 байта (ret 1)
0x02 - блок данных 1028 байта (ret 1)
0x04 - End of Transmit -> 0x06 (ret 5)
0x18 - Get Cancel (ret 2)
Wait Next Frame Start Timeout (ret 8)


Передача данных для записи в RAM/FLASH производиться как в xmodem, но длина блока данных 4+128 байт или 4+1024 байт. Первые 4-ре байта равны адресу 0x08xxxxxx или 0x10xxxxxx (проверяются только старшие 8 бит - по ним определяется что писать - flash или RAM). Один байт CRC считается просто суммой байт блока данных (с переданным адресом).

0x01, np, ^np, Данные, CRC - передача 132-х байтных боков
0x02, np, ^np, Данные, CRC - передача 1028-ми байтных боков
np - Номер пакета, ^np Номер пакета(дополнение).
При записи flash автоматически производиться стирание (стоит проверка на переход пакета на новый адрес сектора и сектор стирается).


По выходу, передаче EOT (код 0x04), если писалась RAM, то исполняется старт по стандартным адресам в RAM, как загруженного boot из flash. Если писали только flash - "выхода нет" :) - всё по кругу - на начало - пользователь должен жать кнопу reset без кнопки flash (или прописать табличку адресов старта в RAM по формату загрузки boot)

Буфер приема находиться в 0x1003B000 - в него писать не стоит, как и в стек CPU, но всё можно... :)
 

A_D

Active member
Небольшой оффтоп, пока разбираюсь с самодельными платами на RTL8711AM, одна из них зачастую вместо загрузки основного образа прошивки, выводит следующее в Log UART:
Код:
<RTL8195A>
=========================================================


ROM Version: 0.3


Build ToolChain Version: gcc version 4.8.3 (Realtek ASDK-4.8.3p1 Build 2003) 


=========================================================

Check boot type form eFuse

SPI Initial

Image1 length: 0x2080, Image Addr: 0x10000bc8

Image1 Validate OK, Going jump to Image1

<RTL8195A>
===== Enter FLASH-Boot ====
CPU CLK: 83333333 Hz, SOC FUNC EN: 0x11113


[SDR  Err]Test 0: No match addr 0x44090 => 0x706abf06 != 0x353d706a

[SDR  Err]Test 0: No match addr 0x44090 => 0x706abf06 != 0x5547353d
Selected Image 2.
No Image2! Trying Image0...
Invalid Image Signature!

----------------- COMMAND MODE HELP ------------------

    HELP (?)   : Print this help messag


    DB <Address, Hex> <Len, Dec>: 
                Dump memory byte or Read Hw byte register

    DHW <Address, Hex> <Len, Dec>: 
                Dump memory helf-word or Read Hw helf-word register

    DW <Address, Hex> <Len, Dec>: 
                Dump memory word or Read Hw word register

    EW <Address, Hex> <Value, Hex>: 
                Write memory word or Write Hw word register 
                Can write more word at the same time 
                Ex: EW Address Value0 Value1

    SPICTOOL <Mode, Dec> <BitMode, Dec>: 
                Mode = 1: Init SPIC;  BitMode: 0(One)/1(Dual)/2(Quad)
                Mode = 2: Erase Chip 


----------------- COMMAND MODE END  ------------------

<RTL8195A>
Насколько я вижу, можно аналогично по uart писать\читать память.. или я не так понял что то ?
 

pvvx

Активный участник сообщества
Насколько я вижу, можно аналогично по uart писать\читать память.. или я не так понял что то ?
Такой-же, почти аналогичный, монитор есть и у серии "B".
На серии "A" и "B" (сидели на трубе) в него вываливается загрузчик из ROM, если не находит boot-loаder-а в Flash.
На серии "A" имеет ошибки - нельзя давать вывод дампа более что-то 100 байт. Зависнет из-за переполнений буферов - криво писано.
В моем boot-lader-е эти мониторы запускаются если нет прошивки или выбрана загрузка прошивки, которой нет.
[SDR Err]Test 0: No match addr 0x44090 => 0x706abf06 != 0x353d706a - это ошибка не связанная с ошибками в инициализации SDRAM у серии "A". Выскакивает по недразумению из-за использования кода ROM и там мелкое несогласование с HAL в RAM... Как убрать/исправить пока не решил - это больше связано с разрешением вывода отладочных сообщений и их флагов при калибровке SDRAM. Если включить, то при инициализации SDRAM будет выведено несколько килобайт сообщений :)
В текущих моих сборках SDRAM калибруется на 100 MHz, в ROM-BIOS таблица на 50 MHz вроде, HAL в RAM на 100... У Ameba двойная инициализация, что в итого = тормоз при старте. Так-же на вывод этих soo зависят и сохраненные в Flash настройки калибровок SDRAM.
Но это всё про "A", а тема тут про "В" :) Там даже процы разные и в "Б" CPU значительно быстрее в попугаях и имеет FPU в придачу... В общем плане "B" серия есть работа над ошибками "A" серии и ROM-BIOS там содержит весь API и рабочий, что не сказать про "A" серию. И т.к. ошибок практически мало в "B" и всё там уже готовое, то мне она не интересна. Для развития народных тем "В" не подходит - нет возможностей индивидуумам проявить себя. Народные темы строятся на том, что неизвестно, закрыто и надо копать, и есть возможности для модернизации (улучшений начальной свалки от производителя и т.д.), а не от https://esp8266.ru/forum/threads/nostalgija.2844/
По этому принципу полностью готовое я не делаю, т.к. всегда надо оставлять возможность другим “проявить себя” (для самого себя)... :)
 
Последнее редактирование:

pvvx

Активный участник сообщества
В инет найдена такая утилита: AmebaZ_1-10_MP_Image_Tool.exe
Снимок37.gif
Ждет приема байта 0x15, передает 0x07, модуль отвечает 0x06 и происходит заливка с указанием адреса и длины 1024 байтной записи...
Снимок36.gif
Всё это есть в rtltool-py
 

Вложения

Последнее редактирование:
Сверху Снизу