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

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

你好

我有一个新的定制pcb存在以下问题:UART工作(使用空闪存),但当我尝试通过串行方式编程闪存时,我得到以下错误:

........................................................................................................................ .. ..程序QSPI  .. ........................................................................................................................ . ........................................................................................................................ .. ..编程的形象  .. ........................................................................................................................版权所有(c) 2015-2019 Dialog Semiconductor使用串口COyabo国际娱乐M5,波特率57600。设置串口波特率为115200。连接到设备……上传引导加载程序/应用程序可执行文件...上载的可执行文件。设置串口波特率为57600。uartboot上传失败:无效的通知消息收到  . ........................................................................................................................ .错误:。 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_对话框
离线
最后一次见到:2天14小时前
职员
加入:2018-02-08 11:03
嗨Ethsiplab,

嗨Ethsiplab,

这种错误最可能的原因是UART没有正确读取数据。您能探测UART信号并共享UART跟踪吗?此外,如果可能的话,分享定制电路板的原理图将非常有帮助。如前一个论坛线程中所述,您应该使用P0_8(UART-RX)和P0_9(UART-TX),而不是P0_7、P0_9。您也可以在表2中找到它:DA1469x数据表中的DA14691/5引脚说明。为此,请确保您使用的UART引脚正确吗?

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

该函数通过轮询UART来检查执行是否已达到第二引导加载程序阶段。如果没有收到响应,则返回“timeout waiting for response”(等待响应超时),否则尝试通过UART读取,如果已退出第一阶段引导加载程序(ROM引导加载程序),则检查版本是否受支持或返回“unsupported bootloader version”(不支持的引导加载程序版本)。如果达到时间限制,它将以默认状态结束,返回ERR_PROT_UNKNOWN_响应,触发打印“接收到无效公告消息”

谢谢,下午好

乙酰甲胺磷实验室
离线
最后一次见到:6个月1周前
加入:2019-09-13 12:58
你好,

你好,

谢谢你的帮助。

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

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

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

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

依恋:
PM_对话框
离线
最后一次见到:2天14小时前
职员
加入:2018-02-08 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捕获。我使用的是DA14695子板,TTL UART在3.0V。它使用默认的pxp_reporter, cliprogrammer和uartboot进行测试,没有任何修改,如SDK所提供的。捕获是在对子板编程时考虑SmartSnippets Studio (program_qspi_serial脚本)。

此外,我并不完全确定是否有PCB中的任何组件,下降3V下的电压。所以,请您能测量UART信号中的电压电平吗?如果它不到3V,那么您可能会提供高于3V的电源电源。

谢谢,下午好

依恋:
乙酰甲胺磷实验室
离线
最后一次见到: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)

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

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

结论:在我看来,引导加载程序似乎加载得很好(如“DA1469x从串行接口引导.pdf”的表1和图2所述),但它从未开始执行,也从未初始化实际下载到Flash的程序。是否有可能引导加载程序在访问闪存或类似的东西时遇到问题?我使用的MX25U3235FZNI-10G闪存应该与子板上的相同,只是不同的封装。

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()函数的开始时放置一个断点,但如果您想确保将其肯定放置,无论您认为这是合适的。

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

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

/**传输处理(包括输入/输出数据)的完整流程如下:*<(ver1)(ver2)*=>*=>(类型)(len1)(len2)*呼叫跃点初始*</*如果len>0*=>(数据…)呼叫跃点数据*<//<0*<=(len1)(len2)*=>/*调用HOP\u SEND\u DATA*<=(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,以便为特定闪存选择正确的配置,只要它有一个驱动程序。

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

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

最好的问候,
GA_Dialog

乙酰甲胺磷实验室
离线
最后一次见到:6个月1周前
加入:2019-09-13 12:58
你好

你好

很抱歉延迟回复。我怀疑我的闪存芯片坏了,并更换了它,不幸的是,这并没有解决问题。然而,令人惊讶的是,当我尝试在没有焊接闪存芯片的情况下对电路板进行编程时,错误是不同的。它出现在引导加载程序肯定正在运行的稍后时间点(请参阅下面的控制台日志)。我还检查了示波器,在没有闪存的情况下,主板缺少4字节的响应。我在主板上使用MX25U3235FZNI-10G闪存芯片。

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

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

........................................................................................................................ .. ..程序QSPI  .. ........................................................................................................................ . ........................................................................................................................ .. ..编程的形象  .. ........................................................................................................................版权所有(c) 2015-2019 Dialog Semiconductor使用串口COyabo国际娱乐M5,波特率57600。设置串口波特率为115200。连接到设备……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 .. ........................................................................................................................

乙酰甲胺磷实验室
离线
最后一次见到:6个月1周前
加入:2019-09-13 12:58
你好,

你好,

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

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

PM_对话框
离线
最后一次见到:2天14小时前
职员
加入:2018-02-08 11:03
嗨Ethsiplab,

嗨Ethsiplab,

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

谢谢,下午好

乙酰甲胺磷实验室
离线
最后一次见到:6个月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或…才能成功吗?

谢谢,

乙酰甲胺磷实验室

PM_对话框
离线
最后一次见到:2天14小时前
职员
加入: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修改,并未建议使用。

谢谢,下午好