UartBoot上传失败:收到无效的通知消息

⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.xmece.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
11个员额/ 0个新员额
最后发表
ethsiplab
离线
最后看到:6个月1个星期前
加入:2019-09-13 12:58
UartBoot上传失败:收到无效的通知消息

我有一个新的自定义pcb与以下问题:UART工作(空flash),但当我尝试通过串行编程闪存,我得到以下错误:

........................................................................................................................ .. ..程序QSPI  .. ........................................................................................................................ . ........................................................................................................................ .. ..编程的形象  .. ........................................................................................................................版权所有(c) 2015-2019 Dialog Semiconductor使用串口COyabo国际娱乐M5,波特率57600。设置串口波特率为115200。连接到设备……上传引导加载程序/应用程序可执行文件…可执行文件上传。将串口波特率设置为57600. UartBoot上传失败:收到无效的通知消息。.................................................................................................................... ERROR: . cli_programmer.exe" has exited with code: 4294967190 . . call: "D:\smartsnippets_ws\SDK_10.0.6.88\binaries\cli_programmer.exe" --cfg C:\Users\mme\AppData\Local\Temp\tmpq9lxd8zg COM5 write_qspi 8192 C:\Users\mme\AppData\Local\Temp\tmp1y1fc9c7 ........................................................................................................................ . . ........................................................................................................................ .. .. FINISHED .. ........................................................................................................................

它说,收到了无效的公告消息。你有什么可能引起这一点的经历吗?

我擦除闪存时也会发生同样的事。

我没有编辑uartboot.bin中cli_programmer命令的任何配置。与开发工具包的子板,它工作没有任何问题。

谢谢你的帮助!

设备:
PM_Dialog
离线
最后看到:2天15小时前
工作人员
加入:2018-02-08 11:03
嗨ethsiplab,

嗨ethsiplab,

这种错误最可能的原因是UART没有正确读取。你能探测UART信号并共享一个UART跟踪吗?此外,如果可能的话,分享您的定制板的原理图将非常有帮助。正如之前论坛帖子中提到的,您应该使用P0_8(UART RX)和P0_9(UART TX)而不是P0_7、P0_9。您还可以在DA1469x数据表的表2:DA14691/5 Pin Description中找到它。要做到这一点,请确保使用正确的UART引脚?

请检查位于cli_programmer项目-> protocol_cmds.c file -> get_boot_stage(int timeout)下的get_boot_stage()函数。

该函数通过轮询UART来检查执行是否已经到达第二个引导加载程序阶段。如果没有收到应答,那么它返回“超时等待响应”,否则它尝试读取整个UART,如果它已经离开了第一阶段引导加载程序(ROM bootloader),它检查版本,看看它是否被支持或返回“不支持的引导加载程序版本”。如果达到时间限制,它将以默认状态结束,返回ERR_PROT_UNKNOWN_RESPONSE,这将触发打印“收到无效声明消息”

谢谢,PM_Dialog

ethsiplab
离线
最后看到:6个月1个星期前
加入:2019-09-13 12:58
你好,

你好,

谢谢您的帮助。

我确实使用了正确的针脚,另一个条目是拼写错误。附上了原理图的相关部分。

我也将TX和RX追踪与子板(工作的工作)和PCB(不起作用)进行比较。在UartBoot.bin下载后,两个板都表现得完全相同。之后,与DEV板相比,PCB无法发送响应。我还附上了迹象和两个级别的放大在故障区域上。痕迹是从子板中取出的,但PCB迹线看起来绝对相同,直到这种缺失的回复(如果没有发生任何事情)。

这是否可以帮助您判断问题可能存在的地方?

(抱歉图片质量不好。蓝色是计算机的Tx,DA14695的红色TX)

PM_Dialog
离线
最后看到:2天15小时前
工作人员
加入:2018-02-08 11:03
嗨ethsiplab,

嗨ethsiplab,

如前一个论坛帖子和通过电子邮件所讨论的,似乎您无法从UART读取正确的字节。最可能的原因可能是由于PCB问题。为此,我建议您查看PCB并检查UART迹线。

请在SmartSnippets Studio Project目录中导入剪贴画器和libprogrammer。libprogrammer是剪贴画器项目的一部分。如果您通过Libprogrammer项目的源代码,请在Programmer.c文件中找到“收到的”错误“错误对应于ERR_PROT_UNKNOWN_RESPONSE定义。此错误仅在get_boot_stage.c函数中发生(位于Protocol_cmds.c文件中)。此函数读取当前引导级中的字节。但是,它无法读取正确的字节,并且它将进入交换机语句中的默认值(Err = Err_Prot_unkNown_Response;)。我还建议检查AN-B-069:从串行接口启动DA1469X应用笔记为了更好地了解引导序列。在第5.1节中,您将找到UART字节序列应该如何。

请查找附加来自逻辑分析仪的UART捕获。我正在使用3.0V的TTL UART使用我们的DA14695子板。它用默认的PXP_Reporter,Cpiprogrommer和Uartboot测试,没有任何修改,如SDK所示。捕获是在编程子板上编程SmartSnippets Studio(program_qspi_serial脚本)的编程。

另外,我不完全确定在你们的PCB中是否有任何组件将电压降至3V以下。那么,你能测量UART信号中的电压等级吗?如果它在3V以下,那么你可以给板提供一个大于3V的电源。

谢谢,PM_Dialog

附件:
ethsiplab
离线
最后看到:6个月1个星期前
加入:2019-09-13 12:58
你好,

你好,

谢谢您的回复。电压应该不是问题。电平是在3V和电路板上,我正在测试,我们甚至没有放置部件以外的MCU和所有必要的部分围绕它(帽,电感,ram,晶体)。

所以我通过逐步完成源代码,并使用示波器验证它:

  1. 在Protocol_upload_executable()中,通过接收STX(0x02)在Protoct_verify_connection()中验证连接,该STX(0x02)在电源启动时确实是广播STX的STX(0x02)。
  2. 之后,在send_initial_code()中,上载引导加载程序。这是根据表1的“从串行interfaces.pdf启动的DA1469X”中的工作方式:
    1. 主机发送SOH(0x01)和长度(在我的情况下0xF4,0x77)
    2. 单板响应ACK (0x06)
    3. 主机发送引导加载程序
    4. 董事会回应CRC(在我的案例中是0x66)
    5. 主机发送ACK(0x06)

这完全如表1所示的“DA1469X从串行接口启动的图2所描述的”。“,我可以按比特逐位测量它。这就是如此,之后,董事会TX线进入GND,没有任何事情再次发生。同时,主机将波特拉特设置为57600,等待Get_boot_stage()中的另一个状态更新(由protocol_cmd_upload_bootloader()调用))。它从未收到过,然后触发要在CLI_Programmer的主要功能中打印的错误消息以及要中止的整个过程。

与此相比,子板的行为完全相同(如上所述的字节值)。但是在从主机接收到ACK(2.5上方)后,电路板将此更新:0x02,0x01,0x00,0x03在较低的波特兰,然后将下载触发到闪存。

结论:对我来说,似乎引导加载程序加载得很好(如表1和图2中的“DA1469x boot from Serial Interfaces.pdf”所描述的),但它从未开始执行,也从未初始化实际下载到Flash中的程序。是否有可能引导加载程序访问Flash或类似的问题?我使用的是mx25u3235fzin - 10g Flash,它应该与子板上的一个完全相同,只是一个不同的包。

ga_dialog.
离线
最后看到:4个月3个星期前
加入:2019-08-02 09:02
问候,

问候,

让我们首先尝试查看下载到RAM的代码是否已执行。如果发生这种情况,我们应该能够确定代码失败的位置。

我建议您将uartboot.bin编译为DA1469x-00_Debug,并在编译后尝试调试为-> RAM_DA1469x。通过这种方式cli_programmer将尝试将uartboot的调试版本下载到PCB的RAM中并执行代码。丢失的签名在uartboot的main()函数中很早就出现了。默认情况下,调试应该在main()函数的开始处放置一个断点,但如果您想要确定在您认为合适的地方放置一个断点。

通过这种方式,我们将首先验证uartboot main()在下载到RAM后是否执行了,然后我们可以确定在哪个函数中执行失败。

典型的交易应该如下所示:

/* *一个完整的传输处理流程(包括输入/输出数据)如下:* * < = < STX > < SOH > (ver1) (ver2) * = > < SOH > * = >(类型)(len1) (len2) *叫HOP_INIT * < = < ACK > / < NAK > *如果len > 0 * = >(数据…)*叫HOP_DATA * < = < ACK > / < NAK > * < = (crc1) (crc2) * = > < ACK > / < NAK > *叫HOP_EXEC * < = < ACK > / < NAK > *叫HOP_SEND_LEN *如果len > 0 * < = (len1) (len2) * = > < ACK > / < NAK > *叫HOP_SEND_DATA * < =(数据…)*=> (crc1) (crc2) * <=  /  * *如果NAK已经在某个步骤被发送,则不应该执行下一步。* /

如uartboot main.c文件所述。

如果我没有弄错的是交易的第一步,你似乎似乎失踪了,这让我想知道代码是否已经执行了。如果它是,请检查它是否在init()上,我们应该开始检查它是​​否是未找到或初始化的闪存。

编辑:调试uartboot时,请在qspi_automode_init()函数上放置一个断点,该函数可以在{sdk_root} /sdk/bsp/memory/src/qspi_automode.c文件中找到。在到达Main()之前,系统执行SystemItInit(),它尝试读取闪存的JEDEC ID,以便只要有一个驱动程序就可以为特定闪存选择正确的配置。

要在特定函数上放置断点,请单击项目,然后在调试图标旁边找到箭头并选择debug Configurations。有选择RAM_DA1469x。点击启动选项卡,在最底部应该有一个选中的选项“设置断点”,默认值为“main”。

我希望这能缩小问题所在。

此致,
ga_dialog.

ethsiplab
离线
最后看到:6个月1个星期前
加入:2019-09-13 12:58

抱歉回复晚了。我怀疑,我的闪存芯片坏了,并更换了它,不幸的是,没有解决问题。然而,令人惊讶的是,当我试图在电路板上没有焊接闪存芯片时,错误是不同的。当引导加载程序明确运行时,它将出现在稍后的时间点(参见下面的控制台日志)。我还检查了Scope,没有闪光灯,缺少的4字节响应板正在进来。我在我的板上使用mx25u3235fzin - 10g闪存芯片。

谢谢你用调试的建议。虽然我将SWDIO和SWCLK传送到连接器,但我没有互换调试适配器进行串行电线调试(您推荐产品,我找不到一个吗?)。我希望使用dev-kit的主板作为调试适配器,但这不起作用。(它不适用于外部连接的子板拔未插入和GND,VBAT,SWDIO(P0_10),即连接的SWCLK(P0_11))。

这里的控制台日志没有焊接闪存芯片:

........................................................................................................................ .. ..程序QSPI  .. ........................................................................................................................ . ........................................................................................................................ .. ..编程的形象  .. ........................................................................................................................版权所有(c) 2015-2019 Dialog Semiconductor使用串口COyabo国际娱乐M5,波特率57600。设置串口波特率为115200。连接到设备……按下复位。上传引导加载程序/应用程序可执行文件…可执行文件上传。设置串口波特率为57600。 Writing to address: 0x00002000 offset: 0x00000000 chunk size: 0x00002000 Verify writing to qspi address 0x2000 failed. Retrying ... write to QSPI failed: timeout waiting for response (-100) . ........................................................................................................................ . ERROR: . cli_programmer.exe" has exited with code: 1 . . call: "D:\smartsnippets_ws\SDK_10.0.6.88\binaries\cli_programmer.exe" --cfg C:\Users\manue\AppData\Local\Temp\tmpgp9wsxlb COM5 write_qspi 8192 C:\Users\manue\AppData\Local\Temp\tmp679bal0u ........................................................................................................................ . . ........................................................................................................................ .. .. FINISHED .. ........................................................................................................................

ethsiplab
离线
最后看到:6个月1个星期前
加入:2019-09-13 12:58
你好,

你好,

再次感谢您的帮助!
我尝试了你在手机上推荐给我的内容:我使用了很短的电线将SWD连接到主板并用GND线扭曲它们。但是,即使只是通过具有低比特率的GDB服务器连接,它也不工作。虽然同样的事情与插入的子板一起使用(并且我可以在该方案中测量SWD信号),但我无法在尝试通过导线而不是J1和J2连接器时既不测量任何SWDIO和SWCLK的任何信号。当没有插入子板时,主板甚至没有启动通信?是否有其他PIN(除SWDIO,SWDCLK,GND和VBAT之外)我需要连接或拉到GND或...进行这项工作?

我已经订购了一个J-Link Segger适配器,希望很快到达,但它将很好地得到这与主板已经早些运行。

PM_Dialog
离线
最后看到:2天15小时前
工作人员
加入:2018-02-08 11:03
嗨ethsiplab,

嗨ethsiplab,

随着Ga_Dialog让我了解我,你今天有一个短暂的电话。请尝试调试程序,即Ga_Dialog向您建议您,然后更新故障单,如果问题存在或者您是否有任何其他后续问题。

谢谢,PM_Dialog

ethsiplab
离线
最后看到:6个月1个星期前
加入:2019-09-13 12:58
嗨PM_DIALOG.

嗨PM_DIALOG.

谢谢你的建议。我愿意按照上面的程序来做。然而,目前我无法从DEV-Kit主板建立到pcb(或子板)的SWD连接。我想这是能够进行任何调试过程的前提条件。这也是问题所在,那通电话是关于。GA_Dialog给出了一些关于主板和设备之间的swd连接的真正有价值的输入。
但是,正如我上面提到的那样,在将子板或PCB通过电线连接到主板时,没有SWD的通信(使用主板作为调试适配器)。因此,我的问题:当没有插入子板时,主板甚至没有启动通信吗?是否有其他PIN(除SWDIO,SWDCLK,GND和VBAT之外)我需要连接或拉到GND或...进行这项工作?

谢谢,

ethsiplab

PM_Dialog
离线
最后看到:2天15小时前
工作人员
加入:2018-02-08 11:03
嗨ethsiplab,

嗨ethsiplab,

我为迟给您回信而道歉。我也在内部与GA_Dialog讨论过这个问题。如果你查看专业主板原理图,你会发现一个名为“电压电平转换”的电路。该电路负责DA1469x与ATSAM3U2CA-CU之间的电平电压转换。在DA1469x的观点,M33_SWDIO/ M33_SWCLK操作1.8V。然而,在ATSAM3U2CA-CU芯片中,SWDIO/SWCLK工作在3V上,因此需要一个双向电压转换。这是“电压电平转换”电路的操作。为了实现这种电压转换,操作放大器(U1)应该提供3伏电压。否则,DA1469x与ATSAM3U2CA-CU之间无法建立连接。为了做到这一点,如果您的自定义板(或当DA1469x子板从Pro-DK断开连接时),要从Pro-DK获得JTAG访问,您应该:

  1. 将3伏电源的电池连接到v30,在J4标题中暴露。具体而言,您应该具有共同的地面并将电池连接到J4:28(V30)引脚。
  2. 从V30电源轨跳线从您的定制板到J4:28 (V30)引脚。DA1469x子板需要大量的pcb修改,不建议。

谢谢,PM_Dialog