从UART装载船的麻烦-错过了一个步骤?

⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子//www.xmece.com/support.我们将在未来几天修复bug /优化搜索和标记。
5个帖子/ 0新
最后发表
kyflores
离线
最后一次露面:3年2个月前
加入:2017-11-28 18:02
从UART装载船的麻烦-错过了一个步骤?

你好,

我试图通过一个FT232中断作为实现an - b -001中描述的引导协议的python pyserial脚本的com端口从UART引导加载。DA14580安装在定制的PCB上。到目前为止,我相信我已经生成了一个可行的二进制图像,成功地加载到DA14580芯片上,但是之后似乎没有开始执行。以下是我迄今为止所采取的步骤,这些步骤使我得出了以下结论:

1.从SDK (projects/peripheral_examples/ Blinky)按原方式构建Blinky项目,生成Blinky .axf。
2.将blinky.axf传递给Keil的fromelf.exe实用程序--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,我不认为我的进程可以做任何方式,但我认为引导加载程序为您做了类似的事情。

无论如何,我一定是遗漏了一个步骤所以如果你能给我一些建议那将对我有很大帮助。谢谢!
凯尔

设备:
mt_dialog.
离线
最后一次露面:4个月2周之前
工作人员
加入:2015-06-08 34
嗨kyflores,

嗨kyflores,

在使用Keil构建项目后,您不必通过该实用程序传递.1458x_sdk \ 5.0.4 \ projects \ target_apps \ peripheral_examples \ blinky \ keil_5 \ Out目录,您将能够找到相应的。十六进制文件。如果自定义PCB正常运行并且由于FW成功下载到设备,那么我就不会看到任何对您所描述的程序都不发出错误。关于您对SP和PC所提到的值,在通过JTAG下载代码的情况下,您将通过Keil加载这些值,因此由于ROM Booter(从外部设备启动时)将照顾那些二进制文件一旦Donwloaded进入设备。尝试通过Smart Scippets UART Booter卸载代码,并检查电路板是否应该这样运转。

谢谢mt_dialog.

kyflores
离线
最后一次露面:3年2个月前
加入:2017-11-28 18:02
这样你就可以

这样你就可以直接加载Keil的HEX文件了吗?当我在编辑器中看到它时,它看起来像因特尔十六进制格式,这里只是我的十六进制blob看起来像的一小段
: 020000042000 da
:1000000000980020A5040020AD040020C5040020B5
: 1000100000000000000000000000000000000000 e0
:100020000000000000000000000000000000000000000000000000dd040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dd04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dd0400000000000000000000000000000dd040020cf.
:1000300000000000000000000000f5040020fd1d00206d.
: 1000400035230020232400200 d310300112400203b
...等等
或者,在某种程度上,Keil将以直接兼容的不同格式输出其.hex文件?对不起,如果这是一个明显的问题,我们不会使用Keil作为我们的主要开发工具。

无论如何,我给了Smart Scippets A Go,它的工作正常,所以我的加载脚本一定是错误的。我比较了来自Smart Scippet的装载机和我的波形,看起来我的最终ACK = 0x06来自PC侧的到达比智能片段更高。您认为这可能导致图像加载到RAM,但执行无法启动吗?

谢谢!
凯尔

mt_dialog.
离线
最后一次露面:4个月2周之前
工作人员
加入:2015-06-08 34
嗨kyflores,

嗨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.

kyflores
离线
最后一次露面:3年2个月前
加入:2017-11-28 18:02
我又看了一下我的

我又仔细检查了一下我的脚本是如何发送最终确认的(它是错误的,而且很晚),那里有一个需要注意的问题。感谢您提到SmartSnippets组件来进行十六进制-> bin转换,了解这些也很有帮助。我想说这件事已经解决了。