你好
我有一个新的自定义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命令的任何配置。与开发工具包的子板,它工作没有任何问题。
谢谢你的帮助!
设备:
嗨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
你好,
谢谢您的帮助。
我确实使用了正确的针脚,另一个条目是拼写错误。附上了原理图的相关部分。
我也将TX和RX追踪与子板(工作的工作)和PCB(不起作用)进行比较。在UartBoot.bin下载后,两个板都表现得完全相同。之后,与DEV板相比,PCB无法发送响应。我还附上了迹象和两个级别的放大在故障区域上。痕迹是从子板中取出的,但PCB迹线看起来绝对相同,直到这种缺失的回复(如果没有发生任何事情)。
这是否可以帮助您判断问题可能存在的地方?
(很抱歉的坏图像质量。信誉是计算机的TX,在DA14695的红色TX)
嗨Ethsiplab,
正如在以前的论坛上发帖,并通过电子邮件以及讨论,似乎你不能读取UART正确的字节。最可能的原因可能是由于PCB的问题。要做到这一点,我会建议您检查您的PCB,并检查UART痕迹。
请在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字节序列应该如何。
随函附上从逻辑分析仪采取了UART捕获。我使用我们的DA14695子板与TTL UART在3.0V。它与默认pxp_reporter,cliprogrammer和uartboot没有任何修改测试,作为提供是SDK。捕获是同时编程子板思想SmartSnippets工作室(program_qspi_serial脚本)。
此外,我并不完全确定是否有PCB中的任何组件,下降3V下的电压。所以,请您能测量UART信号中的电压电平吗?如果它不到3V,那么您可能会提供高于3V的电源电源。
谢谢,PM_Dialog
你好,
谢谢回复。电压不应该是一个问题。该水平在3V和电路板上,我在测试中,我们甚至没有将除MCU之外的部分和周围的所有必要部件放置(盖子,电感器,RAM,晶体)。
于是我通过源代码一步一步的去与示波器验证它:
这一切工作完全一样在表1中与“DA1469x引导从串行Interfaces.pdf”的图2中描述,我可以由位范围的位测量。这只是事后板TX行云到GND,从来都没有再次发生。同时,主机设置波特率为57600和get_boot_stage等待另一个状态更新()(由protocol_cmd_upload_bootloader称为())。它从未接收,然后触发到被中止在cli_programmer的主要功能和整个过程要打印的错误信息。
与此相比,子板作用完全相同(相同字节值如上述)。但是从主机(2.5以上)接收到ACK后,板发送该更新:0×02 0×01,0×00,×03在较低的波特率然后触发下载到闪存。
结论:对我来说,似乎引导加载程序加载得很好(如表1和图2中的“DA1469x boot from Serial Interfaces.pdf”所描述的),但它从未开始执行,也从未初始化实际下载到Flash中的程序。是否有可能引导加载程序访问Flash或类似的问题?我使用的是mx25u3235fzin - 10g Flash,它应该与子板上的一个完全相同,只是一个不同的包。
你好,
让我们首先尝试查看下载到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,以便只要有一个驱动程序就可以为特定闪存选择正确的配置。
要在特定函数上放置断点,请单击项目,然后在调试图标旁边找到箭头并选择debug Configurations。有选择RAM_DA1469x。点击启动选项卡,在最底部应该有一个选中的选项“设置断点”,默认值为“main”。
我希望这个问题所在的地方缩小。
此致,
GA_Dialog
你好
抱歉回复晚了。我怀疑,我的闪存芯片坏了,并更换了它,不幸的是,没有解决问题。然而,令人惊讶的是,当我试图在电路板上没有焊接闪存芯片时,错误是不同的。当引导加载程序明确运行时,它将出现在稍后的时间点(参见下面的控制台日志)。我还检查了Scope,没有闪光灯,缺少的4字节响应板正在进来。我在我的板上使用mx25u3235fzin - 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连接提供了一些非常有价值的输入。
然而,正如我上面提到的,有连接或者子板或通过导线(使用主板作为调试适配器)我的PCB到主板上时SWD无通信。因此,我的问题:有没有可能是主板甚至不启动通信时,子板没有插入?是否有其他PIN(除SWDIO,SWDCLK,GND和VBAT之外)我需要连接或拉到GND或...进行这项工作?
谢谢,
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访问,您应该:
谢谢,PM_Dialog