你好,
我试图通过FT232 breakout从UART引导加载,充当python pyserial脚本的com端口,该脚本实现了an - b -001中描述的引导协议。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表5。
4.切换板子上的复位线,它发送STX消息和脚本应答等。
5.脚本发送图像,并将其校验和与设备报告的结果进行比较,这里成功。
6.在获得CRC后,脚本返回ACK=0x06。
7.此时此刻执行似乎还没有开始,但是在Segger JLINK tools + gdb下连接到处理器,并从0x20000000开始执行“转储内存”,这表明图像已经在设备上。
我还发现,如果我设置Keil在启动调试时不加载它的应用程序,我可以成功地运行我的引导加载脚本,然后附加到Keil,还可以在内存中找到完整的映像。虽然附加了Keil调试器,我可以继续和我的闪烁应用程序由我的脚本加载将启动。我注意到,当进入调试模式时,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和PC的值,在通过JTAG下载代码的情况下,这些值是通过keil加载的,你不必担心,因为ROM引导器(当从外部设备引导时)会在二进制文件下载到设备时立即处理这些值。尝试通过Smart Snippets UART引导程序下载代码,并检查电路板是否按应有方式运行。
由于MT_dialog
啊,这样你就可以加载Keil的HEX文件了吗?当我在编辑器中查看它时,它看起来像英特尔十六进制格式,这里只是我的.hex blob看起来像的一个简短片段
: 020000042000 da
等: 1000000000980020 a5040020ad040020c5040020b5
: 1000100000000000000000000000000000000000 e0
: 10002000000000000000000000000000 dd040020cf
: 100030000000000000000000 f5040020fd1d00206d
: 1000400035230020232400200 d310300112400203b
或者,是否有一种方式,Keil将输出其.hex文件在不同的格式,是直接兼容的?如果这是一个明显的问题,很抱歉,我们不使用Keil作为我们的主要开发工具。
无论如何,我给智能片段去,它工作得很好,所以一定是我的加载脚本有问题。我比较了Smart Snippet的加载器和我的波形,看起来我的最终ACK = 0x06从PC端到达比Smart Snippet晚得多。你认为这会导致图像加载到ram但执行失败?
谢谢!
凯尔
嗨kyflores,
我提到凯尔输出.hex文件格式,因为你已经提到你有显式转换从一个.axf文件,你应该下载到设备不是.hex文件本身,而是你需要.hex文件转换为相应的。bin文件,然后加载到你的设备(我假设你已经做,既然你已经提到的,当你把调试器可以看到图像和图像能够运行,除非你没有正确配置keil,它重新下载相同的fw时,附加)。您将能够使用位于DiaSemi\SmartSnippetsStudio\Toolbox\common_resources\firmware_upload中的hex2bin.exe将.hex转换为.bin文件。这也是Smart Snippets在加载.hex文件时所做的。关于您的ACK从脚本到达设备需要时间的事实,是的,当设备期望来自外部设备的数据时,会有一个超时,这个超时大约是60毫秒,所以是的,这是您的脚本不启动的有效原因。
由于MT_dialog
我再次仔细检查了一下我的脚本是如何发送最后的ack的(它是错误的,而且晚了),有一个需要注意的问题。感谢你提到SmartSnippets的组件来做十六进制-> bin转换,这对了解也很有帮助。我想说问题解决了。