我最近购买了STM32F7发现板[1],因此我尝试使用openocd进行闪存,因为该板具有嵌入式st-link调试器。我的工具链正在工作(我正在使用makefile和arm-none-eabi-gcc),但是我想使用eclipse来刷板,所以我可以使用图形调试器。
为了做到这一点,我从他们的git repo安装了openocd并使用以下配置文件启动它:
source [find board/stm32f7discovery.cfg]
然后我使用arm-none-eabi-gdb在eclipse中使用以下命令来刷新电路板:
target remote localhost:3333
monitor flash protect 0 0 11 off
monitor flash erase_address 0x08000000 0x100000
monitor flash write_image erase "/absolute/path/hello-world.hex" 0 ihex
monitor reset halt
我尝试了不同的命令列表,包括我在eclipse [2]或其他SO帖子[3] [4]上设置我的调试链的教程中的一个。有时写入操作失败,并且当它没有以错误的PC结束时(例如0xfffffffe而不是0x080004ac,如果是重置处理程序则是地址)。因此,CPU将尝试执行甚至不存在(在我的内存之外)并且失败的东西。
你知道可能出现什么问题吗?小精度:我在Linux上工作。
干杯,
安托。
[1]:www.st.com/web/en/catalog/tools/FM116/SC959/SS1532/LN1848/PF261641?sc=stm32f7-discovery
[2]:vedder.se/2012/12/debugging-the-stm32f4-using-openocd-gdb-and-eclipse /
[3]:stackoverflow.com/questions/5535110/stm32-gdb-openocd-commands-and-initialization-for-flash-and-ram-debugging
[4]:stackoverflow.com/questions/17003519/stm32f4discovery-openocd-telnet-uploading-demo-program
[5]:github.com/texane/stlink
[编辑]
我还尝试使用github [5]中的st-link程序并加载gdb,我得到了类似的错误:
2016-03-23T09:22:22 INFO src/stlink-common.c: Attempting to write 32768 (0x8000) bytes to stm32 address: 134217728 (0x8000000)
2016-03-23T09:22:22 WARN src/stlink-common.c: Failed to unlock flash!
EraseFlash - Sector:0x0 Size:0x8000
Flash page at addr: 0x08000000 erased
2016-03-23T09:22:22 INFO src/stlink-common.c: Finished erasing 1 pages of 32768 (0x8000) bytes
2016-03-23T09:22:22 INFO src/stlink-common.c: Starting Flash write for F2/F4/L4
2016-03-23T09:22:22 INFO src/stlink-common.c: Successfully loaded flash loader in sram
enabling 32-bit flash writes
size: 32768
2016-03-23T09:22:23 INFO src/stlink-common.c: Starting verification of write complete
2016-03-23T09:22:23 ERROR src/stlink-common.c: Verification of flash failed at offset: 0
答案 0 :(得分:0)
我设法解决了这个问题。事实证明我必须修改内部选项字节,这在我试图闪存板时阻止了我。
我使用 st-link实用程序将它们设置回默认值,现在一切正常!可能会使用 openocd ,但我还没有尝试过。如果有人知道该怎么做,那么分享它会很高兴。
有关选项字节的更多详细信息,您可以查看参考手册[1],第80页到第83页。