• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Кто доделает Flasher для RTL00 c JlinkARM.dll?

sharikov

Active member
JLINKARM_WriteU32($40006000, 0);
JLINKARM_WriteU32($40006004, rdl);
JLINKARM_WriteU32($40006008, wrl);
JLINKARM_WriteU32($40006060, $B1); // ENSO (enter secured OTP)
И ничего описанного вами не происходит. Что не так?
Команду даете неправильно
ctrlr0 = 0x00000100
SSIENR = 1
DR = 0xb1
..wait ready..
SSIENR = 0
Делаю сброс и получаю:
Код:
=========================================================

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: 0xf, Image Addr: 0xf
Image1 Validation Incorrect !!!
Please Re-boot and try again, or re-burn the flash image
<RTL8195A>
<RTL8195A>?
----------------- 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>
 

pvvx

Активный участник сообщества
Не вижу различий:
JLINKARM_WriteU32($40006000, $100);
JLINKARM_WriteU32($40006008, 1);
JLINKARM_WriteU32($40006060, cmd);
repeat
JLINKARM_ReadMemU32($40006028, 1, @w, 0)
until (w and 1) = 0;
JLINKARM_WriteU32($40006008, 0);
Далее, через паузу, даю Jlink-у reset и грузится прошивка. К модулю подключил Jlink-STLink (SWD только).
Другой вариант:
Код:
<RTL8710AF>SPICTOOL 1 2
Initial Spi Flash Controller
Initial Spic Four bit mode
<RTL8710AF>EW 40006000 100 0 1
addr: 0x40006000; value:0x100
addr: 0x40006004; value:0x0
addr: 0x40006008; value:0x1
<RTL8710AF>EW 40006060 B1
addr: 0x40006060; value:0xb1
<пауза>
<Jlink сброс...>
=========================================================

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: 0x3a94, Image Addr: 0x10000bc8
Image1 Validate OK, Going jump to Image1
BOOT from Flash:YES
===== Enter Image 1 ====
SDR Controller Init
....
Ещё - там была ошибка (Initial Spic Four bit mode):
Код:
<RTL8710AF>SPICTOOL 1 1
Initial Spi Flash Controller
Initial Spic Two bit mode
<RTL8710AF>EW 40006000 100 0 1
addr: 0x40006000; value:0x100
addr: 0x40006004; value:0x0
addr: 0x40006008; value:0x1
<RTL8710AF>EW 40006060 B1
addr: 0x40006060; value:0xb1
<RTL8710AF>DW 98000000
98000000:    96969999    FC66CC3F    03CC33C0    6231DCE5
<RTL8710AF>
 
Последнее редактирование:

sharikov

Active member
Меня счас больше интересует SPI flash более 16 Мегабайт. А то в ESP8266 было ограничение до 16 и не мог использовать...
Это надо для логгирования и чтобы не ставить FRAM.
Ограничение 16мег есть и в rtl, причем не факт что его получится обойти не порушив магию отображения в озу.
Обращаться к области выше первых 16 метров можно вручную. Думаю будет работать вариант когда 16метров работают как обычно а выше "врукопашную". Для фс сойдет.
С прошивкой проблем нет потому что во флэшере навороты не используются и выдача команды и адреса производится по 1 байту. Сейчас выдается 3 байта адреса, выдать 4 - это 1 строчка кода.

spic на порту c работает ?
по таблице он туда маппится.
у меня есть в наличии флэшки MX66L51235 на 512мбит
 

pvvx

Активный участник сообщества
spic на порту c работает ?
Не пробовал. Сча специально тестирую на RTL8711AM - там торчит.
у меня есть в наличии флэшки MX66L51235 на 512мбит
Это не проблема...
В общем не работает по командам от reabane ни с каким модулем у меня. Его инициализация двух регистров для отсылки команды или неверна или ещё что-то.
Ограничение 16мег есть и в rtl, причем не факт что его получится обойти не порушив магию отображения в озу.
Смотрите SDK - там есть команды для больших SPI Flash. Всё давно сделано.
 
Последнее редактирование:

sharikov

Active member
В общем не работает по командам от reabane ни с каким модулем у меня. Его инициализация двух регистров для отсылки команды или неверна или ещё что-то.
Там не два регистра инициализируется а намного больше. Два - только при отправке команды. Берите в моей репе работающий код и проверьте его в начале на RTL00
 

pvvx

Активный участник сообщества
Там не два регистра инициализируется а намного больше. Два - только при отправке команды. Берите в моей репе работающий код и проверьте его в начале на RTL00
Вы же сказали - достаточно записи одного байта - вот и изучаю. А теперь надо специальную прошивку делать? Всё управление flash есть в SDK и там для большинства типов уже всё описано. Надо всего собрать вызовы процедур и странслировать, а не бегать по помойкам :) или дублировать нерабочий код.
Да, последних исходников hal_spi_flash_ram.c нет. Есть только прошлогодние, без быстрой записи и правок align (нечетных обращений Flash/ram и т.д.). Т.е. не хватает 4-х процедур вроде... Они добавлены после SDK 3.4. и находятся в либе. Заголовки даны.
Чтение и запись через функции в них быстрее чем через spic (тестировал по счетчику тактов CPU - делал все сравнения от memcpy до одиночных чтений байта/слов/блоков). Но можно ещё ускорить - код там достаточно кривоватый - много лишнего.
В mbed\targets\hal\rtl8195a\flash_api.c множественные недочеты. Надо доделывать. Часть уже исправил... Главный там - flash у вас в SDK от PINE работает на 1 бит, параметры калибровки на максимум скорости или из записи установок в flash не сохраняются в [inline]flash_t flashobj;[/inline], а место в структуре выделено. Когда доделаю - куну в свою кучу, если не забуду...
 
Последнее редактирование:

pvvx

Активный участник сообщества
У меня пустая OTP на RTL8711AM
Код:
# ATFO=0,64
00000000 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
00000020 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
На RTL8710AF:
Код:
# ATFO=0,64
00000000 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
00000020 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 32 85 01 5e 4e 55
Пока написал чтение OTP для трех типов flash: MXIC, EON, MICRON
Для MXIC это примерно так:
SpicTxCmdWithDataRtl8195A(FLASH_CMD_ENSO, 0, 0, flashobj.SpicInitPara); // enter secured OTP
SpicUserReadRtl8195A(Length, address, data, flashobj.SpicInitPara.Mode.BitMode);
SpicTxCmdWithDataRtl8195A(FLASH_CMD_EXSO, 0, 0, flashobj.SpicInitPara); // exit secured OTP
 
Последнее редактирование:
Сверху Снизу