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

⚠️
您好..感谢来参加论坛。令人振奋的消息!我们现在在移动到我们的新论坛的平台,将提供更好的功能,并且包含在主对话框网站中的过程。所有职位和帐户已迁移。现在我们接受的新论坛的流量只有 - 请发表任何新的线程在//www.xmece.com/support。我们将修复bug /优化搜索和标记在未来的日子里。
11个员额/ 0个新员额
最后一篇
ethsiplab
离线
最后看到:6个月1个星期前
加入:2019-09-13 12:58
UartBoot上传失败:收到无效的通知消息

你好

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

........................................................................................................................。。。。PROGRAM QSPI .. ........................................................................................................................ . ........................................................................................................................ .. .. Programming image .. ........................................................................................................................ cli_programmer 1.26 Copyright (c) 2015-2019 Dialog Semiconductor Using serial port COM5 at baud rate 57600. bootloader file not specified, using internal uartboot.bin Setting serial port baud rate to 115200. Connecting to device... Uploading boot loader/application executable... Executable uploaded. Setting serial port baud rate to 57600. uartboot upload failed: invalid announcement message received . ........................................................................................................................ . 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年2月8日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项目get_boot_stage()函数 - > protocol_cmds.c文件 - > get_boot_stage(INT超时)。

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

谢谢,PM_Dialog

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

你好,

谢谢您的帮助。

我用的别针是正确的,另一个输入是打错了。附上示意图的相关部分。

我还比较了TX和RX跟踪,当下载到子板(它工作)和pcb(它不工作)。在下载uartboot.bin之前,这两个板的行为完全相同。之后,与开发板相比,pcb无法发送响应。我还附加了跟踪和两层放大的缺陷区域。跟踪是从子板获取的,但pcb跟踪看起来完全相同,直到缺少响应(之后什么都没有发生)。

这能帮助你判断问题出在哪里吗?

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

PM_Dialog
离线
最后看到:2天15小时前
职员
加入:2018年2月8日11:03
嗨ethsiplab,

嗨ethsiplab,

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

请在SmartSnippets Studio项目目录中导入cliprogrammer和libprogrammer。libprogrammer是cliprogrammer项目的一部分。如果你仔细查看libprogrammer项目的源代码,在programmer.c文件中,你会发现“invalid announcement message received”错误对应于ERR_PROT_UNKNOWN_RESPONSE定义。这个错误只会发生在get_boot_stage.c()函数中(位于协议cmds.c文件中)。这个函数在当前引导阶段读取字节。但是,它不能读取正确的字节,在switch-case语句中它将进入默认值(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()中,连接在protocol_verify_connection()中通过接收STX (0x02)进行验证,这就像我的板在通电时确实广播STX一样。
  2. 然后,在send_initial_code()中上传引导加载程序。这是根据“DA1469x从串行接口启动。pdf”中的表1工作的:
    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主()被下载到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()上是否失败,我们应该开始检查它是否是未找到或初始化的flash。

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

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

我希望缩小了问题出在哪里。

此致,
ga_dialog.

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

你好

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

感谢您对调试的建议。虽然我已经将SWDIO和SWCLK路由到连接器,但我没有用于Serial Wire debug的兼容调试适配器(您是否推荐一个产品,我找不到一个?)我希望使用DEV-Kit的主板作为调试适配器,但这行不通。(当子板未插拔,GND, VBAT, SWDIO (P0_10), SWCLK (P0_11)外部连接时也不工作)。

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

........................................................................................................................。。。。PROGRAM QSPI .. ........................................................................................................................ . ........................................................................................................................ .. .. Programming image .. ........................................................................................................................ cli_programmer 1.26 Copyright (c) 2015-2019 Dialog Semiconductor Using serial port COM5 at baud rate 57600. bootloader file not specified, using internal uartboot.bin Setting serial port baud rate to 115200. Connecting to device... Press RESET. Uploading boot loader/application executable... Executable uploaded. Setting serial port baud rate to 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年2月8日11:03
嗨ethsiplab,

嗨ethsiplab,

作为GA_Dialog让我认识我,你今天有一个简短的电话。请尝试GA_Dialog建议您的调试过程,如果存在问题或有其他后续问题,请更新票证。

谢谢,PM_Dialog

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

嗨PM_DIALOG.

谢谢你的建议。我很想按照上述的程序。不过,目前我不能建立从DEV-Kit的主板SWD连接到我的PCB(或daugtherboard)。这是一个先决条件是能够做任何调试过程中,我猜。这也是问题,打电话约。GA_Dialog了关于主板和设备之间的SWD-连接一些真正的旅游居停输入。
但是,正如我上面提到的那样,在将子板或PCB通过电线连接到主板时,没有SWD的通信(使用主板作为调试适配器)。因此,我的问题:当没有插入子板时,主板甚至没有启动通信吗?是否有其他PIN(除SWDIO,SWDCLK,GND和VBAT之外)我需要连接或拉到GND或...进行这项工作?

谢谢,

ethsiplab

PM_Dialog
离线
最后看到:2天15小时前
职员
加入:2018年2月8日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. 从您的自定义板J4的V30电源轨跳线:28(V30)引脚。在DA1469x子板的情况下,很多PCB修改应该做,但不推荐。

谢谢,PM_Dialog