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

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
11个帖子/ 0新
最后一篇
ethsiplab.
离线
最后一次露面:三个月两个星期前
加入:2019-09-13 12:58
UartBoot上传失败:收到无效的通知消息

你好

我有一个新的自定义PCB,下面的问题:UART工作(带有空闪存),但是当我尝试通过串行程序编程闪存时,我收到以下错误:

....................................................................................................................。。。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 .. ........................................................................................................................

它说,收到了一个无效的公告消息。你有什么经验可以导致这种情况吗?

当我尝试擦除闪存时,发生同样的事情。

我没有编辑CLI_Programmer oder的任何配置uartboot.bin。使用dev-kit子板它没有任何问题。

谢谢你的帮助!

设备:
PM_DIALOG.
离线
最后一次露面:16小时48分钟前
职员
加入: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引脚描述。要这样做,请确保您使用正确的UART引脚?

请检查位于cli_programmer项目下的get_boot_stage()函数 - > protocol_cmds.c文件 - > get_boot_stage(int超时)。

函数通过轮询UART检查执行是否已达到第二个引导加载程序阶段。如果没有收到答案,那么它返回“超时等待响应”,否则它试图通过UART读取,如果它已经出于第一阶段引导加载程序(ROM Bootloader),它会检查该版本以查看它是否被支持或返回“不支持”Bootloader版本“。如果达到时间限制,它将最终以默认状态返回err_prot_unknown_response,它触发了“收到的无效公告消息”的打印

谢谢,PM_DIALOG.

ethsiplab.
离线
最后一次露面:三个月两个星期前
加入:2019-09-13 12:58
你好,

你好,

谢谢您的帮助。

我确实使用了正确的pin,其他条目是一个打印错误。相关部分的原理图已附呈。

我还比较了TX和RX跟踪,当下载到子板(工作)和我们的pcb(不工作)。在下载uartboot.bin之前,两块板子的行为完全相同。之后,pcb与dev-board相比较,发送响应失败。我还附加了痕迹和两级放大的缺陷区域。跟踪从子板中取出,但pcb跟踪看起来完全相同,直到这个丢失的响应(在此之后什么也没有发生)。

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

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

PM_DIALOG.
离线
最后一次露面:16小时48分钟前
职员
加入:2018-02-08 11:03
嗨Ethsiplab,

嗨Ethsiplab,

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

请在SmartSnippets Studio项目目录中导入cliprogrammer和libprogrammer。libprogrammer是cliprogrammer项目的一部分。如果仔细查看libprogrammer项目的源代码,在program .c文件中,您会发现“收到的无效公告消息”错误对应于ERR_PROT_UNKNOWN_RESPONSE定义。这个错误只会在get_boot_stage.c()函数(位于protocol_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.
离线
最后一次露面:三个月两个星期前
加入:2019-09-13 12:58
你好,

你好,

谢谢回复。电压不应该是一个问题。该水平在3V和电路板上,我在测试中,我们甚至没有将除MCU之外的部分和周围的所有必要部件放置(盖子,电感器,RAM,晶体)。

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

  1. 在protocol_upload_executable()连接验证在protocol_verify_connection()接收STX (0x02)作为我的板确实广播STX时上电。
  2. 然后,在send_initial_code()中,上载引导加载程序。该工作根据表1中的“DA1469x从串行接口启动。pdf”:
    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在较低的波特兰,然后将下载触发到闪存。

结论:对我来说,它似乎是Bootloader被加载完全正常(如表1和图2所示的“da1469x从串行interfaces引导.pdf”),但它永远不会开始执行,并不开始初始化实际程序下载到闪存。引导加载程序是否有可能访问闪存或类似的东西?我正在使用mx25u3235fzni-10g闪光灯,它应该与子板上的一个相同,只是一个不同的包装。

ga_dialog.
离线
最后一次露面:1个月3周前
加入:2019-08-02 09:02
问候,

问候,

让我们首先看看下载到RAM中的代码是否被执行。如果发生这种情况,那么我们应该能够确定代码在哪里失败。

我建议您构建uartboot.bin作为da1469x-00_debug,并且在编译后尝试调试 - > ram_da1469x。这样Cli_Programmer将尝试将UartBoot的调试版本下载到PCB的RAM中并执行代码。UartBoot的Main()函数的早期缺失的签名正在发生。默认情况下,调试应在Main()函数的开始时放置一个断点,但如果您想确保将其肯定放置,无论您认为这是合适的。

这样,我们将首先验证在下载到RAM后执行uartboot main(),然后我们可以确定在哪个函数中,执行失败。

一个典型的事务应该如下所示:

/ * *用于传输处理的完整流量(包括IN / OUT数据)如下:* * <=  (ver1)(ver2)* =>  * =>(类型)(len1)(len2)*呼叫hop_init * <=  /  *如果len> 0 * =>(data ...)* call hop_data * <=  /  * <=(crc1)(CRC2)* =>  /  *呼叫HOP_EXEC * <=  /  *如果LEN> 0 * <=(LEN1)(LEN2)* =>  / * call 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(),它试图读取flash的JEDEC id,以便为特定的flash选择正确的配置,只要它有一个驱动程序。

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

我希望这个问题所在的地方缩小。

此致,
ga_dialog.

ethsiplab.
离线
最后一次露面:三个月两个星期前
加入:2019-09-13 12:58
你好

你好

回复较晚,抱歉。我怀疑,我的闪光芯片被打破并更换了这一点,不幸的是没有解决问题。然而,令人惊讶的是,当我尝试在没有闪存的闪存芯片上编写程序时,错误是不同的。它显示在稍后与引导加载程序肯定运行的时间点(请参阅下面的控制台日志)。我还检查了范围,没有闪光灯,丢失的电路板的4字节响应即将到来。我在我的电路板上使用了MX25U3235FZNI-10G闪存芯片。

谢谢您提供的调试建议。虽然我已经将SWDIO和SWCLK路由到一个连接器,但我没有用于串行线调试的兼容调试适配器(您是否推荐一个产品,我找不到?)我希望使用DEV-Kit的主板作为调试适配器,但这不能工作。(拔插Daughterboard并将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.
离线
最后一次露面:三个月两个星期前
加入:2019-09-13 12:58
你好,

你好,

谢谢你的帮助!
我尝试了您在电话中向我推荐的方法:我用很短的电线将SWD连接到主板上,然后用地线将它们扭在一起。然而,它不工作,即使只是通过GDB服务器连接与低比特率。虽然插入子板时同样的事情也能工作(在这种情况下我可以测量SWD信号),但当试图通过电线而不是J1和J2连接器连接时,我不能测量SWDIO或SWCLK上的任何信号。是否有可能,当子板没有插入时,主板甚至不发起通信?是否有其他PIN(除SWDIO,SWDCLK,GND和VBAT之外)我需要连接或拉到GND或...进行这项工作?

我已经订购了一个J-Link Segger适配器,希望很快到来,但很高兴能够使用主板更早地跑步。

PM_DIALOG.
离线
最后一次露面:16小时48分钟前
职员
加入:2018-02-08 11:03
嗨Ethsiplab,

嗨Ethsiplab,

GA_Dialog告诉我,你今天的电话很短。请尝试GA_Dialog建议您的调试程序,然后更新票券,如果问题存在或如果您有任何其他后续问题。

谢谢,PM_DIALOG.

ethsiplab.
离线
最后一次露面:三个月两个星期前
加入:2019-09-13 12:58
嗨PM_DIALOG.

嗨PM_DIALOG.

谢谢你的建议。我很乐意遵循上面的程序。但是,目前我无法从Dev-kit主板到我的PCB(或Daugtherboard)建立SWD连接。我猜,这是能够做任何调试过程的预先遗传。这也是问题,电话是关于这个问题。Ga_Dialog对主板和设备之间的SWD连接提供了一些非常有价值的输入。
但是,正如我上面提到的那样,在将子板或PCB通过电线连接到主板时,没有SWD的通信(使用主板作为调试适配器)。因此,我的问题:当没有插入子板时,主板甚至没有启动通信吗?是否有其他PIN(除SWDIO,SWDCLK,GND和VBAT之外)我需要连接或拉到GND或...进行这项工作?

谢谢,

ethsiplab.

PM_DIALOG.
离线
最后一次露面:16小时48分钟前
职员
加入:2018-02-08 11:03
嗨Ethsiplab,

嗨Ethsiplab,

我为我迟到的回复道歉。我还与Ga_Dialog在内部讨论过这个。如果您检查Pro母板原理图,您将找到一个名为“电压电平转换”的电路。该电路负责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电源轨道到J​​4:28(V30)引脚的跳线从V30电源轨道接线。在DA1469X子板的情况下,应完成大量PCB修改,并未建议使用。

谢谢,PM_DIALOG.