你好,
我试图通过一个FT232中断作为实现an - b -001中描述的引导协议的python pyserial脚本的com端口从UART引导加载。DA14580安装在定制的PCB上。到目前为止,我相信我已经生成了一个可行的二进制图像,成功地加载到DA14580芯片上,但是之后似乎没有开始执行。以下是我迄今为止所采取的步骤,这些步骤使我得出了以下结论:
1.从SDK (projects/peripheral_examples/ Blinky)按原方式构建Blinky项目,生成Blinky .axf。
2.通过作品。使用——bincombined——cpu=Cortex-M0选项获得blinky.bin
3.将blinky.bin传递给与设备交换消息的python脚本(如果有帮助,我可以包括这个,但为了简洁省略了)。脚本监听AN-B-001中的STX = 0x02
4.在板子上切换复位线,它发送STX消息和脚本回复等。
5.脚本发送图像,并将其校验和与设备报告的结果进行比较,这里成功。
6.获得CRC之后,脚本返回ACK=0x06。
7.在这一点上处决似乎还没有开始,但是在Segger JLINK tools + gdb下连接到处理器并从0x20000000开始执行“转储内存”,这表明映像已经在设备上完成了。
我还发现,如果在开始调试时将Keil设置为不加载其应用程序,就可以成功地运行引导加载脚本,然后附加到Keil并在内存中找到完整的映像。当附加与Keil调试器,我可以继续和我的blink应用程序加载我的脚本将启动。我注意到,当进入调试模式时,Keil设置$SP = 0x20000000和$PC = 0x20000004,我不认为我的进程可以做任何方式,但我认为引导加载程序为您做了类似的事情。
无论如何,我一定是遗漏了一个步骤所以如果你能给我一些建议那将对我有很大帮助。谢谢!
凯尔
嗨kyflores,
在你使用keil构建项目后,你不需要通过该实用程序传递.axf文件,在DA1458x_SDK\ 5.0.4\ projects\target_apps\ peripheral_examples\ blinky\ Keil_5 out目录中,你将能够找到相应的.hex文件。如果自定义PCB运行正常,fw成功下载到设备,那么我没有看到任何明显的错误的过程,你描述。关于你提到的值,SP和电脑装载这些值通过通过JTAG凯尔在下载代码的情况下,你不需要担心,自从罗橄榄球员(从外部设备启动时)尽快将照顾这些值的二进制donwloaded到设备。尝试通过智能代码片段UART引导下载代码,并检查单板是否像它应该那样运行。
由于MT_dialog
这样你就可以直接加载Keil的HEX文件了吗?当我在编辑器中看到它时,它看起来像因特尔十六进制格式,这里只是我的十六进制blob看起来像的一小段
: 020000042000 da
等: 1000000000980020 a5040020ad040020c5040020b5
: 1000100000000000000000000000000000000000 e0
: 10002000000000000000000000000000 dd040020cf
: 100030000000000000000000 f5040020fd1d00206d
: 1000400035230020232400200 d310300112400203b
或者,是否有一种方法,Keil将输出它的。hex文件在不同的格式是直接兼容的?如果这是一个明显的问题,那么很抱歉,我们并不使用Keil作为我们的主要开发工具。
无论如何,我给了智能片段一个尝试,它工作得很好,所以我的加载脚本一定有问题。我比较了从智能代码片段的加载器和我的波形,它看起来像我的最终ACK = 0x06从PC端到达远晚于智能代码片段。你认为这会导致图像加载到ram但执行失败启动吗?
谢谢!
凯尔
嗨kyflores,
我提到过keil输出。hex文件格式,因为您已经明确地从。axf文件进行了转换,你应该下载到设备不是.hex文件本身,而是你需要.hex文件转换为相应的。bin文件,然后加载到你的设备(我假设你已经做,既然你已经提到的,当你把调试器可以看到图像和图像能够运行,除非你没有正确配置keil,当附加时它会重新下载相同的fw)。您将能够使用hex2bin.exe将。hex转换为。bin文件,它位于DiaSemi\SmartSnippetsStudio\Toolbox\common_resources\firmware_upload中。这也是智能代码片段在加载.hex文件时所做的。关于您的ACK从脚本到达设备需要时间这一事实,是的,当设备期望从外部设备获得数据时,会有一个超时,这个超时大约是60毫秒,因此,是的,这是不引导脚本的一个有效理由。
由于MT_dialog
我又仔细检查了一下我的脚本是如何发送最终确认的(它是错误的,而且很晚),那里有一个需要注意的问题。感谢您提到SmartSnippets组件来进行十六进制-> bin转换,了解这些也很有帮助。我想说这件事已经解决了。