你好
我有一个新的自定义pcb与以下问题:UART工作(空flash),但当我尝试通过串行编程闪存,我得到以下错误:
........................................................................................................................ .. ..程序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_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
你好,
谢谢你的帮助。
我确实使用了正确的PIN,另一个条目是打字错误。示意图的相关部分随附。
我还比较了下载到子板(可以工作)和pcb(不能工作)时的TX和RX跟踪。在下载uartboot.bin之前,两个板的行为完全相同。之后,pcb在与开发板比较时无法发送响应。我还附加了跟踪和两级放大故障区域。跟踪是从子板上获取的,但是pcb跟踪看起来完全相同,直到这个丢失的响应(之后什么也没有发生)。
这是否有助于您判断问题所在?
)很抱歉图片质量不好。蓝色是计算机TX,红色是DA14695)
嗨ethsiplab,
正如在前一篇论坛文章和电子邮件中所讨论的,您似乎无法从UART读取正确的字节。最可能的原因可能是PCB问题。为此,我建议您检查PCB并检查UART轨迹。
请在SmartSnippets Studio项目目录中导入cliprogrammer和libprogrammer。libprogrammer是cliprogrammer项目的一部分。如果您仔细阅读libprogrammer项目的源代码,在programmer.c文件中,您会发现“接收到无效公告消息”错误对应于ERR_PROT_UNKNOWN_响应定义。此错误仅在get_boot_stage.c()函数(位于protocol_cmds.c文件中)中发生。此函数用于读取当前引导阶段中的字节。但是,它无法读取正确的字节,将进入默认值(err=err\u PROT\u UNKNOWN\u RESPONSE;)在switch case语句中。我还建议您检查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
你好,
谢谢回复。电压不应该是一个问题。该水平是在3V和董事会,我与测试,我们甚至还没有放置比MCU和所有必要部件周围(帽,电感器,RAM,晶体)以外的部分。
所以我一步一步地浏览了源代码,并用示波器验证了它:
这一切都完全按照“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,它应该与子板上的一个完全相同,只是一个不同的包。
你好,
让我们首先尝试看看下载到RAM的代码是否得到执行。如果发生这种情况,那么我们应该能够确定代码失败的地方。
我建议你建立uartboot.bin作为DA1469x-00_Debug,它被编译尝试调试后为 - > RAM_DA1469x。这样cli_programmer会尝试下载uartboot的调试版本到PCB的RAM和执行代码。是缺少签名是发生在uartboot的main()函数得很早。默认情况下调试应放置一个断点在main()函数的开始,但如果你想确保一个地方,无论你觉得这是适当的。
通过这种方式,我们将首先验证uartboot主()被下载到RAM后执行,那么我们就可以在功能确定,执行失败。
典型的事务应该如下所示:
如uartboot main.c文件所述。
如果我没有弄错的话,您似乎缺少的是事务的第一步,这让我怀疑代码是否已执行。如果是,请检查init()上是否出现故障,我们应该开始检查是否是未找到或未初始化的闪存。
编辑:调试uartboot时,请在qspi_automode_init()函数上放置一个断点,该函数可以在{sdk_root}/sdk/bsp/memory/src/qspi_automode.c文件中找到。在到达main()之前,系统会执行SystemInit(),它会尝试读取闪存的JEDEC id,以便为特定闪存选择正确的配置,只要它有一个驱动程序。
要在特定函数上放置断点,请单击项目,然后在调试图标旁边找到箭头并选择debug Configurations。有选择RAM_DA1469x。点击启动选项卡,在最底部应该有一个选中的选项“设置断点”,默认值为“main”。
我希望缩小了问题出在哪里。
最好的问候,
GA_Dialog
你好
抱歉回复晚了。我怀疑,我的闪存芯片坏了,并更换了它,不幸的是,没有解决问题。然而,令人惊讶的是,当我试图在电路板上没有焊接闪存芯片时,错误是不同的。当引导加载程序明确运行时,它将出现在稍后的时间点(参见下面的控制台日志)。我还检查了Scope,没有闪光灯,缺少的4字节响应板正在进来。我在我的板上使用mx25u3235fzin - 10g闪存芯片。
感谢您对调试的建议。虽然我已将SWDIO和SWCLK路由到连接器,但我没有用于串行线调试的兼容调试适配器(您是否推荐产品,我找不到?)。我希望使用开发工具包的主板作为调试适配器,但这不起作用(它不适用于拔出的子板和外部连接的GND、VBAT、SWDIO(P0_10)、SWCLK(P0_11)。
在这里,控制台日志没有闪存芯片焊接在:
你好,
再次感谢您的帮助!
我尝试了你在电话中向我推荐的方法:我用非常短的电线将SWD连接到主板,并用一根接地线将它们扭转。然而,即使只是通过低比特率的GDB服务器连接,它也不起作用。虽然插入的子板也可以使用相同的方法(在这种情况下,我可以测量SWD信号),但在尝试通过导线而不是J1和J2接头连接时,我无法测量SWDIO和SWCLK上的任何信号。当子板未插入时,主板是否可能甚至不启动通信?是否有任何其他引脚(SWDIO、SWDCLK、GND和VBAT除外)需要连接或拉至GND或。。。让这一切顺利吗?
我订购了的J-Link套件含有Segger适配器,希望很快到来,但它会很高兴得到这个运行较早的主板了。
嗨ethsiplab,
当GA_Dialog让我认识我时,你今天有个简短的电话。请尝试GA_Dialog建议您执行的调试过程,如果问题存在或您有任何其他后续问题,请更新记录单。
谢谢,PM_Dialog
嗨PM_Dialog
谢谢你的建议。我很想按照上述的程序。不过,目前我不能建立从DEV-Kit的主板SWD连接到我的PCB(或daugtherboard)。这是一个先决条件是能够做任何调试过程中,我猜。这也是问题,打电话约。GA_Dialog了关于主板和设备之间的SWD-连接一些真正的旅游居停输入。
然而,正如我上面提到的,当通过电线将子板或我的pcb连接到主板(将主板用作调试适配器)时,没有通过SWD进行通信。因此,我的问题是:主板是否可能在子板没有插入时甚至不启动通信?是否有其他引脚(除了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