你好,
我正在尝试从UART引导从UART引导,它是用于实现在AN-B-001中描述的引导协议的PYTHON PYSERIAL脚本的FT232 BreakOut。DA14580安装在自定义PCB上。到目前为止,我相信我已经生产了一种成功加载到DA14580芯片上的可行的二进制图像,但是执行似乎之后的执行似乎并不开始。以下是我到目前为止所采取的步骤,这让我结束了:
1.从SDK(项目/ 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表5中侦听STX = 0x02。
4.在板上切换重置线,它发送STX消息和脚本回复等。
5.脚本发送图像并将其校验和与设备报告的内容进行比较,此处的成功。
6.获取CRC后,脚本会发送回ACK = 0x06。
7.此时执行似乎没有开始,但在Segger JLink工具+ GDB下附加到处理器,并在0x20000000开始执行“转储内存”显示图像已在设备上进行。
我还发现,如果我在启动调试时设置keil无法加载它的应用程序,我可以成功运行我的引导脚本,然后与keil附加,并在内存中找到我的图像完好无损。在附带Keil调试器时,我可以继续,我的脚本加载的Blink应用程序将开始。我注意到,在进入调试模式时,keil设置$ sp = 0x20000000和$ pc = 0x20000004,我认为我的进程无法以任何方式做,但我认为引导加载程序为您做了类似的事情。
无论如何,如果你能建议这可能会帮助我,我必须遗漏一步。谢谢!
-kyle.
嗨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.
啊,这就是你可以像加载Keil的十六进制文件吗?当我在编辑中看了它时,它看起来像英特尔六角形格式,这只是我的.hex blob看起来的短片段
:020000042000DA
...等等:1000000000980020A5040020AD040020C5040020B5
:10000000000000000/10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
:100020000000000000000000000000000000000000000000000000dd040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dd04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dd0400000000000000000000000000000dd040020cf.
:1000300000000000000000000000f5040020fd1d00206d.
:1000400035230020232400200d310300112400203b
或者,在某种程度上,Keil将以直接兼容的不同格式输出其.hex文件?对不起,如果这是一个明显的问题,我们不会使用Keil作为我们的主要开发工具。
无论如何,我给了Smart Scippets A Go,它的工作正常,所以我的加载脚本一定是错误的。我比较了来自Smart Scippet的装载机和我的波形,看起来我的最终ACK = 0x06来自PC侧的到达比智能片段更高。您认为这可能导致图像加载到RAM,但执行无法启动吗?
谢谢!
-kyle.
嗨kyflores,
我提到了keil输出了.hex文件格式,因为您已提到从.AXF文件默认转换,您应该将其下载到设备中而不是.hex文件本身,但您将不得不转换.hex文件到相应的.bin文件然后将其加载到您的设备(我想你已经完成了,因为您已经提到连接调试器时,您可以看到图像,除非如果您不正确配置Keil并在附加时重新下载相同的FW)。您可以使用位于DiaSemi \ SmartSnippetsStudio \ Toolbox \ Common_Resources \ Firmware_Upload的Hex2bin.exe将.hex转换为.bin文件。加载.hex文件时,这也是智能片段所做的。关于它需要时间从脚本到达设备的时间,是的,当设备期望来自外部设备的数据时,存在超时,此超时时间为60毫秒,因此这是您的一个有效原因脚本不启动。
谢谢mt_dialog.
我再次看我的剧本如何在仔细检查(错误,迟到)上发送最终的ACK,并且在那里有一个问题需要注意。感谢您提到Smartsnippet的组件,尽管如此,但也有助于了解。我会说这是解决的。