Решил переложить пару проектов с STM32F103CB на STM32L151CB. Столкнулся с проблемой: openocd не определяет размер флеш-памяти и ID чипа.
Вот лог на команду
flash info 0:
Цитата
Open On-Chip Debugger 0.6.0-dev-00610-gedf0c33 (2012-06-29-11:59)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.sourceforge.net/doc/doxygen/bugs.htmlInfo : only one transport option; autoselect 'jtag'
100 kHz
adapter_nsrst_delay: 100
jtag_ntrst_delay: 100
cortex_m3 reset_config sysresetreq
150 kHz
Info : max TCK change to: 30000 kHz
Info : clock speed 150 kHz
Info : JTAG tap: stm32l.cpu tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)
Info : JTAG tap: stm32l.bs tap/device found: 0x06416041 (mfg: 0x020, part: 0x6416, ver: 0x0)
Info : stm32l.cpu: hardware has 6 breakpoints, 4 watchpoints
Info : JTAG tap: stm32l.cpu tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)
Info : JTAG tap: stm32l.bs tap/device found: 0x06416041 (mfg: 0x020, part: 0x6416, ver: 0x0)
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 00000000 pc: 00000000 msp: 00000000
Info : flash size =
0kbytes#0 : stm32lx at 0x08000000, size
0x00000000, buswidth 0, chipwidth 0
stm32lx - Rev: Y
Info : JTAG tap: stm32l.cpu tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)
Info : JTAG tap: stm32l.bs tap/device found: 0x06416041 (mfg: 0x020, part: 0x6416, ver: 0x0)
Error: stm32l.cpu -- clearing lockup after double fault
target state: halted
target halted due to debug-request, current mode: Handler HardFault
xPSR: 0x00000003 pc: 00000000 msp: 0xffffffe0
Polling target failed, GDB will be halted. Polling again in 100ms
shutdown command invoked
Polling succeeded again
Три платы - один результат!
Думал может из-за того, что флешка заблокирована, но stm32f1xx при тех же условиях по-прежнему определяет объем флешки и выдает ID. так что, полагаю, дело не в этом...
Тут собственно два вопроса:
1. из-за чего это может происходить
2. каким наборам команд использовать для управления
Второй вопрос возник из-за того, что для stm32f1 есть отдельный набор команд (stm32f1x unlock 0, stm32f1x mass_erase 0,...), а для stm32lx подобного нет.
Для стирания флеши попробовал такую команду:
flash erase_address pad unlock 0x08000000 0x0001ffff
но она не сработала ни для stm32f1x, ни для stm32lx (для последней она не сработала, помимо прочего, все по той же причине: не видит флешку)