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

⚠️
你好。。谢谢你来到论坛。令人兴奋的消息!我们现在正在迁移到新的论坛平台,该平台将提供更好的功能,并包含在主对话网站中。所有员额和帐户都已迁移。我们现在只接受新论坛的流量-请在//www.wsdof.com/support. 我们将在未来几天内修复bug/优化搜索和标记。
11个员额/0个新员额
最后一篇文章
ethsiplab
离线
最后看到:4个月1个星期前
加入:2019-09-13 12:58
Uartboot上传失败:收到无效的通知消息

你好

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

........................................................................................................................ .. ..程序QSPI  .. ........................................................................................................................ . ........................................................................................................................ .. ..编程的形象  .. ........................................................................................................................版权所有(c) 2015-2019 Dialog Semiconductor使用串口CO雷竞技电竞平台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_程序员的任何配置。与开发工具包子板它的工作没有任何问题。

谢谢你的帮助!

设备:
PM_Dialog
离线
最后看到:4天1小时前
工作人员
加入:2018-02-08 11:03
你好,实验室,

你好,实验室,

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

请检查位于cli_程序员项目->protocol_cmds.c文件->get_boot_stage(int timeout)下的get_boot_stage()函数。

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

谢谢,PM_Dialog

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

你好

谢谢你的帮助。

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

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

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

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

附件:
PM_Dialog
离线
最后看到:4天1小时前
工作人员
加入:2018-02-08 11:03
你好,实验室,

你好,实验室,

正如在前一篇论坛文章和电子邮件中所讨论的,您似乎无法从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捕获。我使用的是DA14695子板,TTL UART在3.0V。它使用默认的pxp_reporter, cliprogrammer和uartboot进行测试,没有任何修改,如SDK所提供的。捕获是在对子板编程时考虑SmartSnippets Studio (program_qspi_serial脚本)。

此外,我不完全确定您的PCB中是否有任何组件将电压降至3V以下。那么,您能测量UART信号中的电压电平吗?如果低于3V,则可以为电路板提供大于3V的电源。

谢谢,PM_Dialog

附件:
ethsiplab
离线
最后看到:4个月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)

这一切都完全按照“DA1469x从串行接口启动。pdf”的表1和图2所描述的那样工作,我可以用范围一点一点地测量它。只是之后,董事会TX线路去GND,没有发生任何事。同时,主机将波特率设置为57600,并等待get_boot_stage()中的另一个状态更新(由protocol_cmd_upload_bootloader()调用)。它从来没有收到,然后触发错误消息打印在cli_programmer的主函数和整个过程被中止。

与此相比,子板的行为完全相同(与上面相同的字节值)。但在收到主机的ACK(2.5。上面),板发送这个更新:0x02, 0x01, 0x00, 0x03在较低的波特率,然后触发下载到Flash。

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

GA_Dialog
离线
最后看到:2个月3个星期前
加入:2019-08-02 09:02
问候语,

问候语,

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

我建议您将uartboot.bin构建为DA1469x-00_Debug,并在编译后尝试调试为->RAM_DA1469x。这样,cli_程序员将尝试将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()上是否失败,我们应该开始检查它是否是未找到或初始化的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
离线
最后看到:4个月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)外部连接时也不工作)。

此处为控制台日志,未焊接闪存芯片:

........................................................................................................................ .. .. 项目QSPI。。编程图像。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。cli_programmer 1.26版权所有(c)2015-2019 Dialog Semiconductor使用串行端口COM5,波特率为57600。未指定引导加载程序文件,使用内部uartboot.bin将串行端口波特率设置为115200。连接到设备。。。按复位。正在上载引导加载程序/应用程序可执行文件。。。可执行文件已上载。将串行端口波特率设置为57600。写入地址:0x00002000偏移量:0x00000000块大小:0x00002000验证写入qspi地址0x2000失败。重试。。。写入QSPI失败:等待响应超时(-100)。错误:。cli_programmer.exe“已退出,代码为:1。调用:“D:\smartsn雷竞技电竞平台ippets\u ws\SDK\u 10.0.6.88\binaries\cli\u programmer.exe”--cfg C:\Users\manue\AppData\Local\Temp\tmpgp9wsxlb COM5 write\u qspi 8192 C:\Users\manue\AppData\Local\Temp\tmp679bal0u........................................................................................................................ . . ........................................................................................................................ .. .. 已完成。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

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

你好

再次感谢您的帮助!
我尝试了你在电话中建议我的方法:我用很短的电线将SWD连接到主板上,并分别用一根GND线将它们缠绕起来。然而,即使只是通过低比特率的GDB服务器连接,它也不能工作。当插入子板时(我可以测量SWD信号),在尝试通过电线而不是J1和J2连接器连接时,我无法测量SWDIO或SWCLK上的任何信号。是否有可能,主板甚至不发起通信时,子板没有插入?是否有其他引脚(除了SWDIO, SWDCLK, GND和VBAT),我需要连接或拉到GND或…才能成功吗?

我已经订购了一个J-Link Segger适配器,希望很快就能到货,但如果能早点在主板上运行,那就太好了。

PM_Dialog
离线
最后看到:4天1小时前
工作人员
加入:2018-02-08 11:03
你好,实验室,

你好,实验室,

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

谢谢,PM_Dialog

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

嗨PM_Dialog

谢谢你的建议。我很乐意遵循上述程序。但是,目前我无法从DEV Kit主板建立与pcb(或daugtherboard)的SWD连接。我想这是能够执行任何调试过程的先决条件。这也是问题所在,电话是关于。GA_Dialog提供了一些关于主板和设备之间SWD连接的非常有价值的输入。
然而,正如我上面提到的,当通过电线将子板或我的pcb连接到主板(将主板用作调试适配器)时,没有通过SWD进行通信。因此,我的问题是:主板是否可能在子板没有插入时甚至不启动通信?是否有其他引脚(除了SWDIO, SWDCLK, GND和VBAT),我需要连接或拉到GND或…才能成功吗?

谢谢,

ethsiplab

PM_Dialog
离线
最后看到:4天1小时前
工作人员
加入:2018-02-08 11:03
你好,实验室,

你好,实验室,

我为迟给您回信而道歉。我也在内部与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:28(V30)引脚的V30电源轨跨接接线。如果是DA1469x子板,应进行大量pcb修改,不建议这样做。

谢谢,PM_Dialog