mirror of
https://github.com/sandeepmistry/rtl8710-openocd.git
synced 2024-12-04 04:00:29 +00:00
bugfixes
This commit is contained in:
parent
bac8307df0
commit
f2c202861a
7 changed files with 94 additions and 47 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -2,4 +2,5 @@ make_array
|
|||
rtl8710_flasher.bin
|
||||
rtl8710_flasher.elf
|
||||
rtl8710.ocd
|
||||
dump.bin
|
||||
|
||||
|
|
14
Makefile
14
Makefile
|
@ -7,16 +7,17 @@ all:
|
|||
arm-none-eabi-gcc -Wall -g -Os -mlittle-endian -mlong-calls -mthumb -mcpu=cortex-m3 -mfloat-abi=soft -mthumb-interwork -ffunction-sections -ffreestanding -fsingle-precision-constant -Wstrict-aliasing=0 -Wl,-T,rtl8710.ld -nostartfiles -nostdlib -u main -Wl,--section-start=.text=$(FIRMWARE_ADDRESS) -DBUFFER_ADDRESS=$(BUFFER_ADDRESS) rtl8710_flasher.c spi_flash.c -o rtl8710_flasher.elf
|
||||
arm-none-eabi-objcopy -O binary rtl8710_flasher.elf rtl8710_flasher.bin
|
||||
gcc make_array.c -o make_array
|
||||
cp rtl8710_cpu.ocd rtl8710.ocd
|
||||
cp rtl8710_cpu.tcl rtl8710.ocd
|
||||
echo "set rtl8710_flasher_firmware_ptr $(FIRMWARE_ADDRESS)" >>rtl8710.ocd
|
||||
echo "set rtl8710_flasher_buffer $(BUFFER_ADDRESS)" >>rtl8710.ocd
|
||||
echo "set rtl8710_flasher_buffer_size $(BUFFER_SIZE)" >>rtl8710.ocd
|
||||
echo "set rtl8710_flasher_sector_size $(FLASH_SECTOR_SIZE)" >>rtl8710.ocd
|
||||
echo >>rtl8710.ocd
|
||||
echo "array set rtl8710_flasher_code {" >>rtl8710.ocd
|
||||
./make_array <rtl8710_flasher.bin >>rtl8710.ocd
|
||||
echo "}" >>rtl8710.ocd
|
||||
echo >>rtl8710.ocd
|
||||
cat rtl8710_flasher.ocd >>rtl8710.ocd
|
||||
cat rtl8710_flasher.tcl >>rtl8710.ocd
|
||||
cp rtl8710.ocd script/rtl8710.ocd
|
||||
|
||||
clean:
|
||||
|
@ -25,3 +26,12 @@ clean:
|
|||
test:
|
||||
openocd -f interface/stlink-v2-1.cfg -f rtl8710.ocd -c "init" -c "reset halt" -c "rtl8710_flash_read_id" -c "shutdown"
|
||||
|
||||
dump:
|
||||
openocd -f interface/stlink-v2-1.cfg -f rtl8710.ocd -c "init" -c "reset halt" -c "rtl8710_flash_read_id" -c "rtl8710_flash_read dump.bin 0 1048576" -c "shutdown"
|
||||
|
||||
restore:
|
||||
openocd -f interface/stlink-v2-1.cfg -f rtl8710.ocd -c "init" -c "reset halt" -c "rtl8710_flash_auto_erase 1" -c "rtl8710_flash_write dump.bin 0" -c shutdown
|
||||
|
||||
reset:
|
||||
openocd -f interface/stlink-v2-1.cfg -f rtl8710.ocd -c "init" -c "reset halt" -c "rtl8710_reboot" -c shutdown
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@ write file (filename) to flash offset (offset)
|
|||
### rtl8710_flash_verify [filename] [offset]
|
||||
compare file (filename) with flash offset (offset)
|
||||
### rtl8710_flash_auto_erase [1/0]
|
||||
set auto_erase option on/off. flash pages will be autoerased when writing
|
||||
set auto_erase option on/off. flash sectors will be autoerased when writing
|
||||
### rtl8710_flash_auto_verify [1/0]
|
||||
set auto_verify option on/off. each block of data will be auto verified when writing
|
||||
## examples:
|
||||
|
|
69
rtl8710.h
69
rtl8710.h
|
@ -216,5 +216,74 @@ typedef struct{
|
|||
#define PERI_ON_CPU_PERIPHERAL_CTRL_LOG_UART_IR_EN (((uint32_t)0x01) << 21)
|
||||
#define PERI_ON_CPU_PERIPHERAL_CTRL_LOG_UART_PIN_SEL (((uint32_t)0x03) << 22)
|
||||
|
||||
typedef struct{
|
||||
union{
|
||||
volatile uint32_t RBR;
|
||||
volatile uint32_t THR;
|
||||
volatile uint32_t DLL;
|
||||
volatile uint32_t RBR_THR_DLL;
|
||||
};
|
||||
union{
|
||||
volatile uint32_t IER;
|
||||
volatile uint32_t DLH;
|
||||
volatile uint32_t IER_DLH;
|
||||
};
|
||||
union{
|
||||
volatile uint32_t IIR;
|
||||
volatile uint32_t FCR;
|
||||
volatile uint32_t IIR_FCR;
|
||||
};
|
||||
volatile uint32_t LCR;
|
||||
volatile uint32_t MCR;
|
||||
volatile uint32_t LSR;
|
||||
volatile uint32_t MSR;
|
||||
uint32_t RESERVED1[24];
|
||||
volatile uint32_t USR;
|
||||
}__attribute__((packed)) LOG_UART_TypeDef;
|
||||
|
||||
#define LOG_UART ((LOG_UART_TypeDef *)0x40003000)
|
||||
|
||||
// LOG_UART_IER
|
||||
#define LOG_UART_IER_ERBFI (((uint32_t)0x01) << 0)
|
||||
#define LOG_UART_IER_ETBEI (((uint32_t)0x01) << 1)
|
||||
#define LOG_UART_IER_ELSI (((uint32_t)0x01) << 2)
|
||||
#define LOG_UART_IER_EDSSI (((uint32_t)0x01) << 3)
|
||||
|
||||
// LOG_UART_FCR
|
||||
#define LOG_UART_FCR_FIFOE (((uint32_t)0x01) << 0)
|
||||
#define LOG_UART_FCR_RFIFOR (((uint32_t)0x01) << 1)
|
||||
#define LOG_UART_FCR_XFIFOR (((uint32_t)0x01) << 2)
|
||||
#define LOG_UART_FCR_DMAM (((uint32_t)0x01) << 3)
|
||||
#define LOG_UART_FCR_TET (((uint32_t)0x03) << 4)
|
||||
#define LOG_UART_FCR_RT (((uint32_t)0x03) << 6)
|
||||
|
||||
// LOG_UART_LCR
|
||||
#define LOG_UART_LCR_DLS (((uint32_t)0x03) << 0)
|
||||
#define LOG_UART_LCR_STOP (((uint32_t)0x01) << 2)
|
||||
#define LOG_UART_LCR_PEN (((uint32_t)0x01) << 3)
|
||||
#define LOG_UART_LCR_EPS (((uint32_t)0x01) << 4)
|
||||
#define LOG_UART_LCR_STICK_PAR (((uint32_t)0x01) << 5)
|
||||
#define LOG_UART_LCR_BC (((uint32_t)0x01) << 6)
|
||||
#define LOG_UART_LCR_DLAB (((uint32_t)0x01) << 7)
|
||||
|
||||
// LOG_UART_MCR
|
||||
#define LOG_UART_MCR_DTR (((uint32_t)0x01) << 0)
|
||||
#define LOG_UART_MCR_RTS (((uint32_t)0x01) << 1)
|
||||
#define LOG_UART_MCR_OUT1 (((uint32_t)0x01) << 2)
|
||||
#define LOG_UART_MCR_OUT2 (((uint32_t)0x01) << 3)
|
||||
#define LOG_UART_MCR_LOOPBACK (((uint32_t)0x01) << 4)
|
||||
#define LOG_UART_MCR_AFCE (((uint32_t)0x01) << 5)
|
||||
|
||||
// LOG_UART_LSR
|
||||
#define LOG_UART_LSR_DR (((uint32_t)0x01) << 0)
|
||||
#define LOG_UART_LSR_OE (((uint32_t)0x01) << 1)
|
||||
#define LOG_UART_LSR_PE (((uint32_t)0x01) << 2)
|
||||
#define LOG_UART_LSR_FE (((uint32_t)0x01) << 3)
|
||||
#define LOG_UART_LSR_BI (((uint32_t)0x01) << 4)
|
||||
#define LOG_UART_LSR_THRE (((uint32_t)0x01) << 5)
|
||||
#define LOG_UART_LSR_TEMT (((uint32_t)0x01) << 6)
|
||||
#define LOG_UART_LSR_RFE (((uint32_t)0x01) << 7)
|
||||
#define LOG_UART_LSR_ADDR_RCVD (((uint32_t)0x01) << 8)
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -1,8 +1,3 @@
|
|||
set rtl8710_flasher_firmware_ptr 0x10001D00
|
||||
set rtl8710_flasher_buffer 0x10008000
|
||||
set rtl8710_flasher_buffer_size 262144
|
||||
set rtl8710_flasher_sector_size 4096
|
||||
|
||||
set rtl8710_flasher_command_read_id 0
|
||||
set rtl8710_flasher_command_mass_erase 1
|
||||
set rtl8710_flasher_command_sector_erase 2
|
||||
|
@ -16,24 +11,12 @@ set rtl8710_flasher_auto_erase 0
|
|||
set rtl8710_flasher_auto_verify 0
|
||||
set rtl8710_flasher_auto_erase_sector 0xFFFFFFFF
|
||||
|
||||
proc array2file {a local_filename loc} {
|
||||
for {set offset 0} {$offset < [array size a]} {set offset [expr {$offset + 1}]} {
|
||||
append bindata [binary format c $a([expr $offset])]
|
||||
}
|
||||
set fp [open $local_filename "a+"]
|
||||
close $fp
|
||||
set fp [open $local_filename "r+"]
|
||||
fconfigure $fp -translation binary
|
||||
seek $fp $loc
|
||||
puts -nonewline $fp $bindata
|
||||
close $fp
|
||||
}
|
||||
|
||||
proc rtl8710_flasher_init {} {
|
||||
global rtl8710_flasher_firmware_ptr
|
||||
global rtl8710_flasher_buffer
|
||||
global rtl8710_flasher_capacity
|
||||
global rtl8710_flasher_ready
|
||||
global rtl8710_flasher_code
|
||||
|
||||
if {[expr {$rtl8710_flasher_ready == 0}]} {
|
||||
echo "initializing RTL8710 SPI programmer"
|
||||
|
@ -154,6 +137,7 @@ proc rtl8710_flash_sector_erase {offset} {
|
|||
}
|
||||
|
||||
proc rtl8710_flash_read {local_filename loc size} {
|
||||
global rtl8710_flasher_buffer
|
||||
global rtl8710_flasher_buffer_size
|
||||
rtl8710_flasher_init
|
||||
for {set offset 0} {$offset < $size} {set offset [expr {$offset + $rtl8710_flasher_buffer_size}]} {
|
||||
|
@ -164,9 +148,8 @@ proc rtl8710_flash_read {local_filename loc size} {
|
|||
set flash_offset [expr {$loc + $offset}]
|
||||
echo "read offset $flash_offset"
|
||||
rtl8710_flasher_read_block $flash_offset $len
|
||||
set a ""
|
||||
mem2array a 8 [expr {$rtl8710_flasher_buffer + 0x20}] $len
|
||||
array2file a $local_filename $offset
|
||||
dump_image /tmp/_rtl8710_flasher.bin [expr {$rtl8710_flasher_buffer + 0x20}] $len
|
||||
exec dd conv=notrunc if=/tmp/_rtl8710_flasher.bin "of=$local_filename" bs=1 "seek=$offset"
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -191,7 +174,7 @@ proc rtl8710_flash_write {local_filename loc} {
|
|||
set sector [expr {$i / $rtl8710_flasher_sector_size}]
|
||||
if {[expr {$rtl8710_flasher_auto_erase_sector != $sector}]} {
|
||||
echo "erase sector $sector"
|
||||
rtl8710_flasher_sector_erase [expr {$sector * $rtl8710_flasher_sector_size}]
|
||||
rtl8710_flash_sector_erase [expr {$sector * $rtl8710_flasher_sector_size}]
|
||||
set rtl8710_flasher_auto_erase_sector $sector
|
||||
}
|
||||
}
|
|
@ -49,6 +49,7 @@ if {![using_hla]} {
|
|||
set rtl8710_flasher_firmware_ptr 0x10001000
|
||||
set rtl8710_flasher_buffer 0x10008000
|
||||
set rtl8710_flasher_buffer_size 262144
|
||||
set rtl8710_flasher_sector_size 4096
|
||||
|
||||
array set rtl8710_flasher_code {
|
||||
0 0xB671B57F 1 0x25FF4B58 2 0x6B196B1A 3 0x7040F042 4 0x69D96318 5 0xF4414E55
|
||||
|
@ -96,11 +97,6 @@ array set rtl8710_flasher_code {
|
|||
252 0xF0004798 253 0xB2C10002 254 0xD0F82900 255 0xBF00BD08 256 0x100012D5
|
||||
}
|
||||
|
||||
set rtl8710_flasher_firmware_ptr 0x10001D00
|
||||
set rtl8710_flasher_buffer 0x10008000
|
||||
set rtl8710_flasher_buffer_size 262144
|
||||
set rtl8710_flasher_sector_size 4096
|
||||
|
||||
set rtl8710_flasher_command_read_id 0
|
||||
set rtl8710_flasher_command_mass_erase 1
|
||||
set rtl8710_flasher_command_sector_erase 2
|
||||
|
@ -114,24 +110,12 @@ set rtl8710_flasher_auto_erase 0
|
|||
set rtl8710_flasher_auto_verify 0
|
||||
set rtl8710_flasher_auto_erase_sector 0xFFFFFFFF
|
||||
|
||||
proc array2file {a local_filename loc} {
|
||||
for {set offset 0} {$offset < [array size a]} {set offset [expr {$offset + 1}]} {
|
||||
append bindata [binary format c $a([expr $offset])]
|
||||
}
|
||||
set fp [open $local_filename "a+"]
|
||||
close $fp
|
||||
set fp [open $local_filename "r+"]
|
||||
fconfigure $fp -translation binary
|
||||
seek $fp $loc
|
||||
puts -nonewline $fp $bindata
|
||||
close $fp
|
||||
}
|
||||
|
||||
proc rtl8710_flasher_init {} {
|
||||
global rtl8710_flasher_firmware_ptr
|
||||
global rtl8710_flasher_buffer
|
||||
global rtl8710_flasher_capacity
|
||||
global rtl8710_flasher_ready
|
||||
global rtl8710_flasher_code
|
||||
|
||||
if {[expr {$rtl8710_flasher_ready == 0}]} {
|
||||
echo "initializing RTL8710 SPI programmer"
|
||||
|
@ -252,6 +236,7 @@ proc rtl8710_flash_sector_erase {offset} {
|
|||
}
|
||||
|
||||
proc rtl8710_flash_read {local_filename loc size} {
|
||||
global rtl8710_flasher_buffer
|
||||
global rtl8710_flasher_buffer_size
|
||||
rtl8710_flasher_init
|
||||
for {set offset 0} {$offset < $size} {set offset [expr {$offset + $rtl8710_flasher_buffer_size}]} {
|
||||
|
@ -262,9 +247,8 @@ proc rtl8710_flash_read {local_filename loc size} {
|
|||
set flash_offset [expr {$loc + $offset}]
|
||||
echo "read offset $flash_offset"
|
||||
rtl8710_flasher_read_block $flash_offset $len
|
||||
set a ""
|
||||
mem2array a 8 [expr {$rtl8710_flasher_buffer + 0x20}] $len
|
||||
array2file a $local_filename $offset
|
||||
dump_image /tmp/_rtl8710_flasher.bin [expr {$rtl8710_flasher_buffer + 0x20}] $len
|
||||
exec dd conv=notrunc if=/tmp/_rtl8710_flasher.bin "of=$local_filename" bs=1 "seek=$offset"
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -289,7 +273,7 @@ proc rtl8710_flash_write {local_filename loc} {
|
|||
set sector [expr {$i / $rtl8710_flasher_sector_size}]
|
||||
if {[expr {$rtl8710_flasher_auto_erase_sector != $sector}]} {
|
||||
echo "erase sector $sector"
|
||||
rtl8710_flasher_sector_erase [expr {$sector * $rtl8710_flasher_sector_size}]
|
||||
rtl8710_flash_sector_erase [expr {$sector * $rtl8710_flasher_sector_size}]
|
||||
set rtl8710_flasher_auto_erase_sector $sector
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue