你好
我有一个新的自定义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子板它没有任何问题。
Thanks for your help!
设备:

嗨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.
你好,
Thanks for the help.
我确实使用了正确的针脚,另一个条目是拼写错误。附上了原理图的相关部分。
我也将TX和RX追踪与子板(工作的工作)和PCB(不起作用)进行比较。在UartBoot.bin下载后,两个板都表现得完全相同。之后,与DEV板相比,PCB无法发送响应。我还附上了迹象和两个级别的放大在故障区域上。痕迹是从子板中取出的,但PCB迹线看起来绝对相同,直到这种缺失的回复(如果没有发生任何事情)。
这是否可以帮助您判断问题可能存在的地方?
(Sorry about the bad picture quality. Blue is TX of the Computer, Red TX of the DA14695)
嗨Ethsiplab,
As discussed in the previous forum post and over email as well, it seems that you cannot read the correct bytes from UART. The most probable reason might be due to PCB issue. To do so, I would recommend you to review your PCB and check the UART traces.
请在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字节序列应该如何。
Please find attached a UART capture taken from a Logic Analyzer. I am using our DA14695 daughter board with TTL UART at 3.0V. It is tested with the default pxp_reporter, cliprogrammer and uartboot without any modifications, as provided be the SDK. The capture is while programming the daughterboard thought SmartSnippets Studio (program_qspi_serial script).
此外,我并不完全确定是否有PCB中的任何组件,下降3V下的电压。所以,请您能测量UART信号中的电压电平吗?如果它不到3V,那么您可能会提供高于3V的电源电源。
谢谢,PM_DIALOG.
你好,
谢谢回复。电压不应该是一个问题。该水平在3V和电路板上,我在测试中,我们甚至没有将除MCU之外的部分和周围的所有必要部件放置(盖子,电感器,RAM,晶体)。
So I went through the source code step-by-step and verified it with the oscilloscope:
This all works exactly as described in Table 1 and Figure 2 of "DA1469x Booting from Serial Interfaces.pdf" and I can measure it with the scope bit by bit. It's just that afterwards the Boards TX line goes to GND and nothing ever happens again. Meanwhile the host sets the baudrate to 57600 and waits for another status update in get_boot_stage() (called by protocol_cmd_upload_bootloader()). It's never received, which then triggers the error message to be printed in the main function of cli_programmer and the whole process to be aborted.
Compared to this, the daughterboard acts exactly the same (same byte values as above). But after receiving the ACK from the host (2.5. above), the board sends this update: 0x02, 0x01, 0x00, 0x03 at the lower baudrate which then triggers the download to Flash.
结论:对我来说,它似乎是Bootloader被加载完全正常(如表1和图2所示的“da1469x从串行interfaces引导.pdf”),但它永远不会开始执行,并不开始初始化实际程序下载到闪存。引导加载程序是否有可能访问闪存或类似的东西?我正在使用mx25u3235fzni-10g闪光灯,它应该与子板上的一个相同,只是一个不同的包装。
问候,
让我们首先尝试查看下载到RAM的代码是否已执行。如果发生这种情况,我们应该能够确定代码失败的位置。
我建议您构建uartboot.bin作为da1469x-00_debug,并且在编译后尝试调试 - > ram_da1469x。这样Cli_Programmer将尝试将UartBoot的调试版本下载到PCB的RAM中并执行代码。UartBoot的Main()函数的早期缺失的签名正在发生。默认情况下,调试应在Main()函数的开始时放置一个断点,但如果您想确保将其肯定放置,无论您认为这是合适的。
这样,我们将首先验证在下载到RAM后执行uartboot main(),然后我们可以确定在哪个函数中,执行失败。
典型的交易应该如下所示:
如Uartboot Main.c文件中所述。
如果我没有弄错的是交易的第一步,你似乎似乎失踪了,这让我想知道代码是否已经执行了。如果它是,请检查它是否在init()上,我们应该开始检查它是否是未找到或初始化的闪存。
编辑:调试uartboot时,请在qspi_automode_init()函数上放置一个断点,该函数可以在{sdk_root} /sdk/bsp/memory/src/qspi_automode.c文件中找到。在到达Main()之前,系统执行SystemItInit(),它尝试读取闪存的JEDEC ID,以便只要有一个驱动程序就可以为特定闪存选择正确的配置。
要在特定功能上放置断点,请单击项目,然后在调试图标旁边找到箭头并选择调试配置。选择RAM_DA1469X。一旦单击“启动”选项卡,底部的“启动”选项卡,应该有一个选中选项“设置断点”,默认值为“main”。
我希望这个问题所在的地方缩小。
Best Regards,
GA_Dialog
你好
回复较晚,抱歉。我怀疑,我的闪光芯片被打破并更换了这一点,不幸的是没有解决问题。然而,令人惊讶的是,当我尝试在没有闪存的闪存芯片上编写程序时,错误是不同的。它显示在稍后与引导加载程序肯定运行的时间点(请参阅下面的控制台日志)。我还检查了范围,没有闪光灯,丢失的电路板的4字节响应即将到来。我在我的电路板上使用了MX25U3235FZNI-10G闪存芯片。
谢谢你用调试的建议。虽然我将SWDIO和SWCLK传送到连接器,但我没有互换调试适配器进行串行电线调试(您推荐产品,我找不到一个吗?)。我希望使用dev-kit的主板作为调试适配器,但这不起作用。(它不适用于外部连接的子板拔未插入和GND,VBAT,SWDIO(P0_10),即连接的SWCLK(P0_11))。
这里的控制台日志没有闪存的闪存芯片:
你好,
谢谢你的帮助!
我尝试了你在手机上推荐给我的内容:我使用了很短的电线将SWD连接到主板并用GND线扭曲它们。但是,即使只是通过具有低比特率的GDB服务器连接,它也不工作。虽然同样的事情与插入的子板一起使用(并且我可以在该方案中测量SWD信号),但我无法在尝试通过导线而不是J1和J2连接器时既不测量任何SWDIO和SWCLK的任何信号。当没有插入子板时,主板甚至没有启动通信?是否有其他PIN(除SWDIO,SWDCLK,GND和VBAT之外)我需要连接或拉到GND或...进行这项工作?
我已经订购了一个J-Link Segger适配器,希望很快到来,但很高兴能够使用主板更早地跑步。
嗨Ethsiplab,
随着Ga_Dialog让我了解我,你今天有一个短暂的电话。请尝试调试程序,即Ga_Dialog向您建议您,然后更新故障单,如果问题存在或者您是否有任何其他后续问题。
谢谢,PM_DIALOG.
你好PM_DIALOG.
谢谢你的建议。我很乐意遵循上面的程序。但是,目前我无法从Dev-kit主板到我的PCB(或Daugtherboard)建立SWD连接。我猜,这是能够做任何调试过程的预先遗传。这也是问题,电话是关于这个问题。Ga_Dialog对主板和设备之间的SWD连接提供了一些非常有价值的输入。
However, as I mentioned above, there is no communication over SWD when connecting either the daughterboard or my pcb to the motherboard through wires (to use the motherboard as a debug-adapter). Therefore my question: Is it possible that the motherboard does not even initiate communication when the daughterboard is not plugged in? Is there any other pin (other than SWDIO, SWDCLK, GND and VBAT) that I need to connect or pull to GND or ... to make this work?
Thanks,
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访问,您应该:
谢谢,PM_DIALOG.