Получить доступ к uBoot
можно получить через аппаратный UART, пады которого расположены на плате устройства и зачастую подписаны.
Я подключаю роутер через USB-UART преобразователь. Это может быть преобразователь на базе микросхем FT232
, PL2303
, CP2102
и им подобные. Главное, что бы напряжение на выводах TXD/RXD не превышал 3.3в.
Другая особенность МК RT5350 состоит в том, что при подаче питания для нормального старта МК на его выводе RXD был низкий уровень напряжения. USB-UART преобразователь будет же держать на нём высокий уровень напряжения, что не даст МК загрузиться в нормальном режиме. Поэтому при включении преобразователь придётся отключать. (!!! TODO выяснить действительную причину, но смысл в том, что USB-UART должен быть отключен).
После включения MK из SPI Flash считывается и запускается загрузчик uBoot:
U-Boot 1.1.7 (Dec 13 2011 - 13:49:42)
Board: Ralink APSoC DRAM: 32 MB
relocate_code Pointer at: 81fb4000
******************************
Software System Reset Occurred
******************************
spi_wait_nsec: 42
spi device id: c2 20 17 c2 20 (2017c220)
find flash: MX25L6405D
raspi_read: from:30000 len:1000
.*** Warning - bad CRC, using default environment
============================================
Ralink UBoot Version: 3.6.0.0
--------------------------------------------
ASIC 5350_MP (Port5<->None)
DRAM_CONF_FROM: Boot-Strapping
DRAM_TYPE: SDRAM
DRAM_SIZE: 256 Mbits
DRAM_WIDTH: 16 bits
DRAM_TOTAL_WIDTH: 16 bits
TOTAL_MEMORY_SIZE: 32 MBytes
Flash component: SPI Flash
Date:Dec 13 2011 Time:13:49:42
============================================
icache: sets:256, ways:4, linesz:32 ,total:32768
dcache: sets:128, ways:4, linesz:32 ,total:16384
##### The CPU freq = 360 MHZ ####
estimate memory size =32 Mbytes
raspi_read: from:40028 len:6
.
raspi_read: from:0 len:30004
....*************Is_update = 0 plat = 1**************
Please choose the operation:
1: Load system code to SDRAM via TFTP.
2: Load system code then write to Flash via TFTP.
3: Boot system code via Flash (default).
4: Entr boot command line interface.
7: Load Boot Loader code then write to Flash via Serial.
9: Load Boot Loader code then write to Flash via TFTP.
You choosed 4
0
4: System Enter Boot Command Line Interface.
U-Boot 1.1.7 (Dec 13 2011 - 13:49:42)
RT5350 #
RT5350 # help
? - alias for 'help'
bootm - boot application image from memory
cp - memory copy
erase - erase SPI FLASH memory
go - start application at address 'addr'
help - print online help
loadb - load binary file over serial line (kermit mode)
md - memory display
mdio - Ralink PHY register R/W command !!
mm - memory modify (auto-incrementing)
mw - memory write (fill)
nm - memory modify (constant address)
printenv- print environment variables
reset - Perform RESET of the CPU
rf - read/write rf register
saveenv - save environment variables to persistent storage
setenv - set environment variables
tftpboot- boot image via network using TFTP protocol
version - print monitor version
По умолчанию загрузчик читает и запускает ядро linux, но я вовремя нажал 4
и попал в командную строку uBoot.
Но более употребительные операции это 2
позволяющая обновить прошивку роутера и 9
/7
позволяющая обновить сам uBoot.
Обновить uBoot может потребоваться если была заменена SDRAM c 16Mb на 32Mb или сам uBoot слишком стар и имеет проблемы (ранние версии не умели нормально работать с Ethernet).
Рабочие версии uBoot в бинарном виде можно забрать здесь: https://github.com/JiapengLi/OpenWrt-RT5350/tree/master/u-boot
Или копию у меня на сайте:
- uboot128.img - исправленный загрузчик для роутеров с 16Mb SDRAM;
- uboot256.img - исправленный загрузчик для роутеров с 32Mb SDRAM;
- hame-mpr-a1-v22-uboot128.bin - оригинальный загрузчик от оригинального HAME MPR-A1.