• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

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
 

Вложения

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