你好!
我是一个试图熟悉smarsnippets开发环境的新用户。我使用:
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”闪到开发工具包中,但我不能让它工作。
我尝试了两种方法(见下文)都没有结果。
一般的问题:
-我不理解flash过程本身(什么目的的uartboot.bin举例?)这有记录吗?
-我做错了吗?有更好的闪光方式吗?
非常感谢你的帮助。
Step1:我使用Debug_QSPI构建配置构建二进制文件
step2:我使用运行 - >外部工具 - > program_qspi_jtag并获得以下输出
........................................................................................................................ .. ..程序QSPI .. ........................................................................................................................ . ........................................................................................................................ .. ..编程的形象 .. ........................................................................................................................版权所有(c) 2015-2019 Dialog Semiconductor bootlyabo国际娱乐oader文件未指定,使用内部uartboot.bin
然后它永远挂着
方法2:
然后我尝试使用直接启发的命令行工具:sdk_10.0.4.66.2 / doc / html / cli_progrogmer.html
我找不到任何关于GDB-server参数的文档(是否有这样的文档我找不到?),但我从SmartSnippets调用中获取参数并启动gdbserver,如下所示:
GDB-server输出:
JLink_Linux_V644i_x86_64 / / JLinkGDBServer如果门限设备Cortex-M33尾数法- speed 8000 - port 2331 -swoport 2332 -telnetport 2333 vd红外-localhostonly 1日志jlink.log -singlerun严格超时0 -nogui rtos GDBServer / RTOSPlugin_FreeRTOS耐火J-Link GDB服务器V6.44i命令行版本JLinkARM.dll V6.44i (DLL编制2019年5月17日17:37:26)命令行:-if swd -device cortx - 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 Server启动设置----- GDBInit file: none GDBServer监听端口:2331 SWO原始输出监听端口:2332终端的I / O端口:2333年接受远程连接:localhost只生成日志文件:验证下载:在初始化规则的开始:在静默模式:从单一经营模式:在目标连接超时:0——J-Link相关设置女士J-Link主机接口:USB J-Link脚本:没有J-Link设置文件:无------目标相关设置------目标设备:Cortex-M33目标接口:SWD目标接口速率:8000kHz目标端:little连接到J-Link…J-Link连接。硬件:V3.00 S/N: 483051972检查目标电压…Target voltage: 3.30 V TCP/IP port 2331 Listening on TCP/IP port 2331 Connecting to Target…连接到目标正在等待GDB连接…连接到127.0.0.1 Received monitor command: clrbp Received monitor command: reset 0通过SYSRESETREQ和VECTRESET位复位核心和外设。接收到monitor命令:sleep 10 sleep 10ms接收到monitor命令:halt暂停目标CPU... ...Target stopped (PC = 0x0000076C) Received monitor command: memU32 0x20010000 = 0xdeadbeef Writing 0xdeadbeef @ address 0x20010000 Received monitor command: memU32 0x20010004 = 0xdeadbeef Writing 0xdeadbeef @ address 0x20010004 Received monitor command: memU32 0x20010008 = 0xdeadbeef Writing 0xdeadbeef @ address 0x20010008 Received monitor command: memU32 0x2001000c = 0xdead10cc Writing 0xDEAD10CC @ address 0x2001000C Downloading 4 bytes @ address 0x100C0050 - Verify failed Received monitor command: sleep 100 Sleep 100ms Received monitor command: reset 0 Resets core & peripherals via SYSRESETREQ & VECTRESET bit. Received monitor command: sleep 1 Sleep 1ms Received monitor command: halt Halting target CPU... ...Target halted (PC = 0x200010CA) Downloading 2 bytes @ address 0x50000024 - Verified OK Received monitor command: loadbin /tmp/cli_programmer_IDqXYy, 0x00000000 Loading binary file [/tmp/cli_programmer_IDqXYy] ... Downloading 30484 bytes @ address 0x00000000 - Verified OK Binary file loaded successfully (30484 bytes downloaded) Received monitor command: reset 0 Resets core & peripherals via SYSRESETREQ & VECTRESET bit. Received monitor command: go Starting target CPU... Received monitor command: reset 0 Resets core & peripherals via SYSRESETREQ & VECTRESET bit. Received monitor command: halt Halting target CPU... ...Target halted (PC = 0x0000076C) Downloading 1 bytes @ address 0x00000218 - Verified OK Performing single step... ...Target halted (Vector catch, PC = 0x0000076E) Starting target CPU...
cli_programmer输出:
sdk_10.0.4.66.2 /二进制数$ ./cli_programmer gdbserver 0x0 ../projects/dk_apps/demos/pxp_reporter/da1469x-00-debug_qspi/pxp_reporter.bin cli_programmer 1.26版权所有(c)2015-2019对话半导体Bootloayabo国际娱乐der文件未指定,使用内部UARTBOOT.BIN上传引导加载程序/应用程序可执行文件...可执行文件上传。
然后它永远挂着
设备:
嗨rubicoaxel,
您可以请按照以下步骤操作,然后让我知道是否能够将固件下载到QSPI Flash?
谢谢,PM_DIALOG.
非常感谢您的快速回复!
我已经使用参数执行了步骤1:
- 产品ID:DA1469X-00
- Flash Conf:MX25U3235F
- Active_fw_image_addr: 0 x2000
- update_fw_image_address:0x2000
当runnig erase_qspi_jtag时,我获得与之前相同的挂起问题(按照您在#3中建议选择pxp_reporter项目)。
这是SmartSnippet中的输出
我还附加了:./SDK_10.0.4.66.2/utilities/python_scripts/qspi/jlink.log
我刚刚注意到gdbserver命令行sys“-device cortex-m0”而不是“cortex-m33”。那是正常的吗?
嗨rubicoaxel,
您可以查看跳线的配置吗?我照片会非常有帮助。UARTBOOT.BIN是辅助引导加载程序,以便加载应用程序二进制图像。当设备靴子时,BootROM代码将检查OTP,如果它没有使用辅助引导程序,则将加载UARTBOOT.BIN,这是默认配置。我在你得到的消息中看不出任何错误。你重置了董事会吗?此外,您可以尝试通过UART擦除/程序QSPI闪存吗?
谢谢,PM_DIALOG.
你好!
这是我的开发工具包的照片:https://drive.google.com/file/d/1nvgklmbtput9du0ys34o1fosyikg_k5y/view.
UART删除/程序:
我不知道如何擦除和/或程序通过UART(如你要求我尝试)。
我能找到的信息只有https://www.dialog-seminile.com/sites/default/files/an-b-069-da1469 ...
但这只能解释协议。
我假设有sw工具(希望有一些入门指南?)
你能指出一些相关文件吗?
JTAG删除/程序:
你能帮我清除这个过程(或指向相关文件),应该做些什么部分做什么?
到目前为止,这是我对这个过程的拼写猜测:
0.Python-script启动gdb-server并使用cli_programmer工具执行以下操作 /二进制/ cli_programmer”给出的命令,例如
1.JTAG通过直接写入RAM来附加并上传uartboot.bin(类似于RAM-debug-session)
2. JTAG执行SW-RESET(再次,因为我认为RAM-Debug它)
3. uartboot.bin从RAM执行并做什么?
4. uartboot以某种方式(?)执行“
- “chip_erase_all”或
- “program_flash”(在这种情况下,实际图像如何传输?横槽虚拟串口(/ dev / ttyacm0)或其他一些手段?
或者是uartboot.bin由bootrom读取和执行(而不是上面的步骤1-3)?如果是这样,是UARTBOOT.BIN传送的槽/ dev / ttyacm0 - >调试器USB到UART转换器 - > DA1469X BOOT UART?PC侧的工具是负责该沟通的责任吗?
问题4仍然存在,一旦启动了uartboot.bin,删除/ flash命令如何转移到目标上运行的uartboot.bin程序?
非常感谢任何帮助
致以最亲切的问候
阿克塞尔
嗨rubicoaxel,
让我查一下您的问题,然后尽快给您答复。
谢谢,PM_DIALOG.
非常感谢坦克你!
好的,我已经解决了它!
我发现关于cli_programmer的文档(SDK_10.0.4.66.2/doc/html/ cli_programer .html)能够从那里找到它。
短版:似乎目前的闪光程序导致GDB崩溃。一旦我弄清楚cli_programmer序列工作者如何
然后,我能够得到JTAG flash python脚本,以成功地对图像进行编程。
如果其他人遇到过这个,那么串行芯片擦除是你的朋友:)
细节(如果有人奇迹):
在CLI_Programmer上使用strace我检查了与gdb的通信,并且在最终“继续”命令后发出gdbserver,只是停止响应my命令
gdbserver的输出(仅限最后两个命令)
strace cli_programmer的输出(我在#后面的注释)
在jlink。log里,我们看到了无穷无尽的
我猜:
在gdbserver和从flash运行的程序之间存在一些计时竞争条件,导致调试器崩溃并挂起进程。有一个擦除的闪存消除了竞争(在闪存和gdb之间的胭脂程序)。
解决了我的问题uartboot.bin的som
我也设法回答我自己的问题,一旦我有se一些cli_programmer的例子。
bin是通过串口引导的(不是我最初认为的使用GDB上传的)。
1.在第一次执行CLI_Programmer时,它打开并准备Seralport for Boot,然后询问用户按RESET启动启动UartBoot.bin的进程。
2.一旦启动,uartboot.bin将继续执行(在调用之间,并作为cli_programmer给出的命令的终端服务器工作。
3.在cli程序员的后续调用中,不需要启动/重置uartboot.bin,它已经在运行。
最后一个问题:
还有一件事我不明白。
据我所知,SerialPort不是在JTAG模式下使用的,因此为什么CLI_Programmer的JTAG版本需要上传UartBoot.bin(我理解的是串行终端服务器)?
致以最亲切的问候
阿克塞尔
嗨rubicoaxel,
很高兴你发现了你的问题,谢谢你的详细指示。
你能把最后一个问题说清楚吗?正如我在前面的评论中提到的,uartboot.bin是用于加载应用程序二进制映像的辅助引导加载程序。
谢谢,PM_DIALOG.
这就跟你问声好!
是的,在加载应用程序 - 图像槽UART(CLI_Programmer / dev / ttyacm0 ...)的情况下,Uartboot会通过UART接收应用程序并将其编程到QSPI-Flash。到目前为止我和你在一起。
但是在另一种情况下,通过JTAG加载应用程序(cli_programmer gdbserver…),那么uartboot.bin的目的是什么?
它仍然负责闪烁吗?喜欢:
1. JTAG将应用程序图像上传到RAM
2. uartboot.bin(由jtag以某种方式触发)copys从RAM到Flash?
这些都是低级细节,我想我并不重要,我只是好奇你是否碰巧知道了。
致以最亲切的问候
阿克塞尔
嗨rubicoaxel,
作为uartboot.bin是他中间bootloader,cli_programmer用于与目标通信。UARTBOOT固件将自动检测设备变体。UARTBOOT作为辅助引导程序使用,以便将二进制图像加载到设备。
谢谢,PM_DIALOG.