你好!
我是一个试图熟悉SmartSnippets开发环境的新用户。即时通讯使用:
Dev-kit:DA14695-00HQDEVKT-U
SDK:SDK_10.0.4.66.2
JLink:JLink_Linux_V644i_x86_64
SmartSnippets:SmartSnippetsStudio2.0.8
我已经成功地编译了测试程序“pxp reporter”,可以将其加载到RAM中,并在SmartSnippets中进行调试。我可以从手机扫描BLE设备,因此到目前为止一切正常。
现在我想尝试将“pxp reporter”闪存到开发工具包中,但我无法使其工作。
我尝试了两种方法(见下文),但没有结果。
一般问题:
-我不了解闪存过程本身(例如uartboot.bin的目的是什么?)。这是否有文档记录?
-我是不是走错了路?有没有更好的闪现方式?
非常感谢你的帮助。
步骤1:我使用debugqspi构建配置构建二进制文件
步骤2:我使用run->externaltools->program_qspi_jtag并获得以下输出
........................................................................................................................ .. .. 项目QSPI。。编程图像。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。cli_programmer 1.26版权所有(c)2015-2019对话半导体引导加载程序文件未指定,使用内部uartboot.bin雷竞技电竞平台
然后它永远挂着
Method2:
然后我尝试使用命令行工具直接启发:SDK_10.0.4.66.2/doc/html/cli_programmer.html
我找不到任何关于GDB服务器参数的文档(是否有我找不到的文档?),但我从SmartSnippets调用中获取了参数,并按如下方式启动了gdbserver:
GDB服务器输出:
JLink_Linux_V644i_x86_64//JLinkGDBServer-if-swd-device Cortex-M33-endian little-speed 8000-port 2331-swoport 2332-telnetport 2333-vd-ir-localhostonly 1-log JLink.log-singlerun-strict-timeout 0-nogui-rtos-GDBServer/RTOSPlugin\u FreeRTOS SEGGER J-Link GDB Server V6.44i命令行版本JLinkARM.dll V6.44i(DLL编译于2019年5月17日17:37:26)命令行:-if swd-device Cortex-M33-endian little-speed 8000-port 2331-swoport 2332-telnetport 2333-vd-ir-localhostonly 1-log jlink.log-singlerun-strict-timeout 0-nogui-rtos GDBServer/RTOSPlugin FreeRTOS------GDB服务器启动设置------GDBInit文件:无GDB服务器侦听端口:2331 SWO原始输出侦听端口:2332 Te终端I/O端口:2333接受远程连接:仅本地主机生成日志文件:on验证下载:on Init regs on启动:on静默模式:off单次运行模式:on Target连接超时:0 ms------J-Link相关设置------J-Link主机接口:USB J-Link脚本:none J-Link设置文件:none------目标相关设置------Target设备:Cortex-M33目标接口:SWD目标接口速度:8000kHz目标端:很少连接到J-Link…J-Link已连接。固件:J-Link OB-SAM3U128 V3编译2019年1月7日14:06:26硬件:V3.00序列号:483051972检查目标电压…目标电压:3.30 V侦听连接到目标的TCP/IP端口2331…连接到t目标正在等待GDB连接…连接到127.0.0.1收到的监视器命令:clrbp收到的监视器命令:重置0通过SYSRESETREQ和VECTRESET位重置核心和外围设备。收到的监视器命令:睡眠10睡眠10ms收到的监视器命令:停止停止目标CPU…目标已停止(PC=0x000076C)接收到的监视器命令:memU32 0x20010000=0xdeadbeef写入0xdeadbeef@address 0x20010000接收到的监视器命令:memU32 0x20010004=0xdeadbeef写入0xdeadbeef@address 0x20010004接收到的监视器命令:memU32 0x20010008=0xdeadbeef写入0xdeadbeef@address 0x20010008接收到的监视器命令:memU32 0x2001000c=0xdead10cc写入0xDEAD10CC@address 0x2001000C@address 0x100C0050下载4个字节-验证接收到的监视器命令失败:sleep 100 sleep 100ms接收到的监视器命令:reset 0通过SYSRESETREQ和VECTRESET位重置核心和外围设备。接收到的监视器命令:sleep 1 sleep 1ms接收到的监视器命令:暂停暂停目标CPU……目标暂停ed(PC=0x200000CA)在地址0x50000024处下载2个字节-已验证正常收到监控命令:loadbin/tmp/cli\u programmer\u IDqXYy,0x00000000正在加载二进制文件[/tmp/cli\u programmer\u IDqXYy]…在地址0x00000000处下载30484字节-已验证正常二进制文件已成功加载(30484字节已下载)收到的监视器命令:reset 0通过SYSRESETREQ和VECTRESET位重置核心和外围设备。收到的监视器命令:启动目标CPU…收到的监视器命令:reset 0通过SYSRESETREQ和VECTRESET位重置核心和外围设备。收到的监视器命令:停止停止目标CPU…目标已停止(PC=0x000076C)正在下载地址0x00000218处的1字节-已验证正常,正在执行单步…目标已暂停(向量捕获,PC=0x000076E)启动目标CPU。。。
cli_编程器输出:
SDK_10.0.4.66.2/binaries$ ./cli_programmer gdbserver 0x0 ../projects/dk_apps/demo /pxp_reporter/DA1469x-00-Debug_QSPI/pxp_reporter.bin cli_programmer 1.26雷竞技电竞平台可执行文件上传。
然后它永远挂着
关键词:
设备:
嗨,鲁比考塞尔,
你能按照下面的程序,然后让我知道你能下载固件到QSPI Flash吗?
谢谢,PM_Dialog
非常感谢您的快速回复!
我已使用以下参数执行了步骤1:
—产品编号:DA1469x-00
—Flash conf: MX25U3235F . conf
-活动图片地址:0x2000
-更新图片地址:0x2000
当运行erase_qspi_jtag时,我得到了和之前一样的永远挂起的问题(pxp_reporter项目按照您在#3中建议的选择)。
这是SmartSnippets中的输出
我还附上:./SDK_10.0.4.66.2/utilities/python_scripts/qspi/jlink.log
我只是注意到gdbserver命令行sys "-device Cortex-M0"而不是"Cortex-M33"。是正常的吗?
嗨,鲁比考塞尔,
你能检查一下跳线的配置吗?我的照片会很有帮助。bin是用于加载应用程序二进制映像的辅助引导加载程序。当设备启动时,BootROM代码将检查OTP,如果它没有使用辅助引导加载程序,uartboot.bin将被加载,这是默认配置。我看不出你收到的信息有什么错。你把板子重放了吗?另外,您能试着通过UART擦除/编写QSPI flash吗?
谢谢,PM_Dialog
你好!
以下是我的开发工具包的照片:https://drive.google.com/file/d/1NVgKlmbTPuT9DU0yS34o1FosYikG_K5y/view
UART擦除/程序:
我不知道如何通过UART擦除和/或编程(正如您让我尝试的那样)。
我能找到的所有信息是:https://www.dialog - semiconductor.com/sites/default/files/an b - 069 da1469..。
但这仅仅解释了协议。
我假设SDK后面有软件工具(希望还有一些入门指南?)?
你能给我一些相关的文件吗?
JTAG擦除/编程:
你能帮我明确一下流程(或指向相关文件),哪个部分应该做什么?
这是我到目前为止对这个过程的粗略猜测:
0.Python脚本启动gdb服务器并使用cli_程序员工具执行以下操作/binaries/cli\u programmer”给出的命令,例如
1.JTAG通过直接写入RAM来连接并上传uartboot.bin(类似于RAM调试会话)
2.JTAG执行SW-reset(同样,我认为RAM-debug也可以)
3.bin从RAM执行,做什么?
4.uartboot(?)执行“
-“芯片全部擦除”或
-“program_flash”(在这种情况下,实际图像如何传输?通过虚拟串行端口(/dev/ttyACM0)或通过其他方式传输?
或者uartboot.bin是否由bootrom读取和执行(而不是上面的步骤1-3)?如果是,uartboot.bin是否通过/dev/ttyACM0->调试器usb到uart转换器->da1469x引导uart传输?PC端的哪个工具负责该通信?
问题4仍然是,一旦uartboot.bin启动,擦除/ flash命令如何转移到uartboot.bin程序在目标运行?
非常感谢您的帮助
顺致敬意,
阿克塞尔
嗨,鲁比考塞尔,
让我检查一下你的问题,我会尽快给你回复。
谢谢,PM_Dialog
谢谢你,非常感谢!
好了,我解决了!
我发现有关cli程序员的文档(SDK_10.0.4.66.2/doc/html/cli_programmer.html)能够从中找到答案。
简短版本:似乎是flash中的当前程序导致了gdb崩溃。一旦我弄清楚如何cli_programmer串行工人和做
然后,我能够让jtagflashpython脚本成功地编程一个图像。
如果其他人遇到了这个问题,那么串行芯片清除就是你的朋友:)
详细信息(以防其他人怀疑):
在cli_programmer上使用strace,我检查了与gdb的通信,在最终的“continue”命令发出后,gdbserver简单地停止了respondingMy命令
gdbserver的输出(仅最后两个命令)
strace cli#U程序员的输出(我在#之后的注释)
在jlink.log中,我们看到了无尽的
我的猜测:
gdbserver和从闪存运行的程序之间存在某种时间竞争条件,导致调试器崩溃并挂起进程。擦除闪存消除了竞争(闪存中的胭脂程序和gdb之间)。
用uartboot.bin解决了我的一些问题
当我使用一些cli_程序员示例时,我也设法回答了自己的问题。
uarboot.bin由引导rom通过串行端口引导(不是像我第一次想到的那样使用GDB上传)。
1.在cli_programmer的第一次执行时,它打开并准备启动seralport,然后要求用户按下reset以启动uartboot.bin。
2.一旦启动,uartboot.bin将保持执行状态(在调用之间),并充当cli_程序员发出的命令的终端服务器。
3.在随后调用cli程序员时,不需要启动/重置uartboot.bin,因为它已经在运行。
最后问题:
最后一件事我不明白。
serialport在jtag模式中没有被使用,就我所见,所以为什么cli_programmer的jtag版本需要上传uartboot.bin(我理解它作为一个串行终端服务器工作)?
顺致敬意,
阿克塞尔
嗨,鲁比考塞尔,
很高兴你解决了这个问题,谢谢你的详细指示。
你能澄清你的最后一个问题吗?正如我在前面的评论中提到的,uartboot.bin是一个辅助引导加载程序,用于加载应用程序二进制映像。
谢谢,PM_Dialog
你好
是的,在通过UART加载应用程序映像的情况下(cli_programmer/dev/ttyACM0…),uartboot通过UART接收应用程序并将其编程到QSPI闪存。到目前为止,我支持您的观点。
但是在通过JTAG(cli_程序员gdbserver…)加载应用程序的另一种情况下,uartboot.bin的用途是什么?
它还会发光吗?如:
1.JTAG上传应用程序映像到ram
2.uartboot.bin(由JTAG触发)从RAM复制到Flash?
这些都是低级的细节,我想并不重要,我只是好奇你是否碰巧从你的头脑中知道:)
顺致敬意,
阿克塞尔
嗨,鲁比考塞尔,
因为uartboot.bin是cli_programmer用于与目标通信的中间引导加载程序。uartboot固件将自动检测设备变体。uartboot一直被用作辅助引导加载程序,以便将二进制映像加载到设备。
谢谢,PM_Dialog