После попытки прошивать Flash Bank1 128K получаем ошибку - таймаут доступа к Flash.
Это насчёт алгоритма ICP. Обычный тоже не работает, но ошибка другая (не работал и ранее).
Если прошивать алгоритмом ICP для версии FAW44 (которым пользовались ранее), то прошивка проходит. Но здесь уже возникает проблема непосредственно с запуском самой программы.
О запуске.
Для старого чипа используем startup-файл, строки инициализации FMI:
Код
FMI_CR_Val EQU 0x00000018
FMI_BBSR_Val EQU 0x00000000
FMI_BBADR_Val EQU 0x00000000
FMI_NBBSR_Val EQU 0x00000006
FMI_NBBADR_Val EQU 0x00080000
FLASH_CFG_Val EQU 0x00001000
; Setup Flash Memory Interface (FMI)
LDR R0, =FMI_BASE
LDR R1, =FMI_BBSR_Val
STR R1, [R0, #FMI_BBSR_OFS]
LDR R1, =FMI_NBBSR_Val
STR R1, [R0, #FMI_NBBSR_OFS]
LDR R1, =(FMI_BBADR_Val:SHR:2)
STR R1, [R0, #FMI_BBADR_OFS]
LDR R1, =(FMI_NBBADR_Val:SHR:2)
STR R1, [R0, #FMI_NBBADR_OFS]
LDR R2, =FMI_CR_Val
STR R2, [R0, #FMI_CR_OFS]
; Write "Write flash configuration" command (60h)
LDR R0, =FMI_BBADR_Val
MOV R1, #0x60
STRH R1, [R0, #0]
; Write "Write flash configuration confirm" command (03h)
LDR R2, =(FLASH_CFG_Val:SHL:2)
ADD R0, R0, R2
MOV R1, #0x03
STRH R1, [R0, #0]
FMI_BBSR_Val EQU 0x00000000
FMI_BBADR_Val EQU 0x00000000
FMI_NBBSR_Val EQU 0x00000006
FMI_NBBADR_Val EQU 0x00080000
FLASH_CFG_Val EQU 0x00001000
; Setup Flash Memory Interface (FMI)
LDR R0, =FMI_BASE
LDR R1, =FMI_BBSR_Val
STR R1, [R0, #FMI_BBSR_OFS]
LDR R1, =FMI_NBBSR_Val
STR R1, [R0, #FMI_NBBSR_OFS]
LDR R1, =(FMI_BBADR_Val:SHR:2)
STR R1, [R0, #FMI_BBADR_OFS]
LDR R1, =(FMI_NBBADR_Val:SHR:2)
STR R1, [R0, #FMI_NBBADR_OFS]
LDR R2, =FMI_CR_Val
STR R2, [R0, #FMI_CR_OFS]
; Write "Write flash configuration" command (60h)
LDR R0, =FMI_BBADR_Val
MOV R1, #0x60
STRH R1, [R0, #0]
; Write "Write flash configuration confirm" command (03h)
LDR R2, =(FLASH_CFG_Val:SHL:2)
ADD R0, R0, R2
MOV R1, #0x03
STRH R1, [R0, #0]
Для нового изменяем следующие параметры:
FMI_BBSR_Val на 0x02
FMI_NBBSR_Val на 0x08
FMI_NBBADR_Val на 0x200000
Бит, который выбирает Flash для загрузки (CSX) установлен в "1" -> загрузка из bank1.
В свойствах проекта на вкладке "Target" изменяем все 0x80000 на 0x20000 и 0x8000 на 0x20000.
После запуска по debugger'у видно, что программа делает переход на вектор неверного адреса при попытке запустить следующую команду после команды "LDR R0, =FMI_BBADR_Val". При этом в окне дизассемблера текущие команды уже не опознаются (стоит "???"), т.е. - явно неверная инициализация адреса и т.п.
Исполузуем MDK 3.22.
Кто-нибудь уже работал с STR912FAW47 ?