This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC1352P7:MAC 协处理器 NPI 链路丢失数据包-使用集成 CC1352P7无线电的 BeaglePlay

Guru**** 2347040 points
Other Parts Discussed in Thread: SYSCONFIG, LP-CC1352P7, CC1352P7
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1468716/cc1352p7-mac-coprocessor-npi-link-loses-packets---beagleplay-with-integrated-cc1352p7-radio

器件型号:CC1352P7
主题中讨论的其他部件:sysconfig、、、

工具/软件:

我一直在处理与运行 TI-15-4-MAC STACK-GATEWAY-LINUX-SDK 4.40.03版的 MAC 协处理器配置有关的一些看似相关的问题。

我注意到的问题有:

1.) 协处理器每隔几天在网络流量高的情况下就会遇到某种类型的硬故障。 这似乎已在 SDK 7.41中解决。 我现在正在运行一个基于8.30 SDK 版本的协处理器。 我认为此崩溃问题与7.41 SDK 版本说明中提到的链接列表错误有关、但我没有足够的数据来确认这一点。

2.) NPI 链路的解析器在收到坏数据包时会被楔住,在某些情况下会完全楔住,而在其他情况下,它将需要很长的时间来恢复。 我解决了此问题、并记录了问题以及我在另一篇文章中出现的解决方案:


e2e.ti.com/.../cc1352p7-beagleplay---using-coprocessor-binary-in-1352-configured-fh-200kbps---higher-incidence-of-spontaneous-re-joins-with-larger-channel-list

3.从协处理器到 beagle Play Linux 端的数据包仍然存在损坏的问题。 典型的调试输出如下所示:

2025年01月31日02:34:51 PM -__MAIN__-警告-收集器日志:61694.099:错误:uart:chksum 错误
2025年01月31日02:34:51 PM -_MAIN__-警告-收集器日志:61694.099:错误:错误:incoming-msg msg (0x89796b) nbytes=103 len = 98 [ 0xFE 0x62 0x43 0x00 0x20 0xFE 0x54 0x42]
2025年01月31日02:34:51 PM -_MAIN__-警告-收集器日志:61694.100:00000000:Fe 62 43 00 20 Fe 54 42-85 02 03 00 00 00 00 00 00 00 00 |.BC。 太差了 |
2025年01月31日02:34:51 PM -_MAIN__-警告-收集器日志:61694.101:00000010:00 00 02 bb aa 00 00 00 00 00 00 f0 07 ea 00 0c |… |
2025年01月31日02:34:51 PM -__MAIN__-警告-收集器日志:61694.101:00000020:00 dc ac dc d6 00 E1-91 33 33 33 33 33 |…… 3333333|
2025年01月31日02:34:51 PM -__MAIN__-警告-收集器日志:61694.102:00000030:33 05 03 03 e8 5e 62 00-21 00 00 00 1e 2a 1e 0A |3……^…
2025年01月31日02:34:51 PM -__ main__-警告-收集器日志:61694.102:00000040:18 08 01 12 09 08 01 12-05 2D CD 4c 92 43 12 09 |…… -.L.C.|
2025年01月31日02:34:51 PM -_MAIN__-警告-收集器日志:61694.103:00000050:08 02 12 05 2D 23 F5 91-43 10 C4 89 2a D7 Fe 54 |...-#..*..T|
2025年01月31日02:34:51 PM -_MAIN__-警告-收集器日志:61694.103:00000060:42 85 02 03 00 00 -|B. |
2025年01月31日02:34:52 PM -__MAIN__-警告-收集器日志:61695.068:错误:**错误**设置/操作失败、状态代码为:0x01

这由 host_cCollector 二进制文件生成、并从 stderr 捕获、并由我的应用程序进行记录。 这就是为什么每行都预先添加了额外的标题信息。 "- warning -"之后的所有内容都由 TI host_cCollector 代码生成为错误消息。

在这个特定实例中、您可以看到就在0xFE 同步字节之后、缺少一些字节、并且新消息开始:

Fe 62 43 00 20 Fe 54 42-85 02 03 00 00 00 00 00 00

跳过从字节3开始、新消息的开头从字节5开始。 根据此场景的确切发生方式、在重新同步之前会丢失2-3条堆栈消息。

我还没有很好的信息来说明数据是在发送端还是在接收端丢失 我要遵循的缩小这一范围的计划是:

1.) 我订购了1352P7-1 LaunchPad 电路板、并将运行相同的设置、但使用1352 LaunchPad 作为协处理器。 这应该会告诉我 BeaglePlay UART 实现是否存在问题。 如果确实发现 BeaglePlay UART 存在问题、我会希望 TI 应该有所帮助、因为它是一款 TI 产品。

2.) 如果这无法产生不确定的结果、或者问题仍然发生、我将监控1352中的 UART TX 线路、并生成解析器来监视流量和标记错误。

但是、我真的希望 TI 对这里发生的事情有一些了解。  这是一个非常严重的问题、给我们带来了一些问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Arthur、

    我确实将日志接收器设置为 ITM、并且 Rx 还尝试启用所有低级 DCL/Tx 1。

    我是否可能需要禁用睡眠以使其正常工作? ITM 驱动器实际上是否有低功耗运行配置?

    Josh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Joshua、

    在低功耗运行方面、使用 ITM 日志记录将阻止器件进入待机模式、因为需要关闭 JTAG 电源域:

    我必须自己试用 ITM 日志机制。 在154堆栈上, 我只使用了 UartSink。

    此致、

    Arthur

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Arthur、

    好的。 我很可能会有一些时间在今天或明天再次对此进行调整、如果我注意到任何感兴趣的内容、我会让您知道。 我还意识到、自上次与收集器成功使用 ITM 日志记录以来、这里发生了工具链更新、其中包括 XDS110固件的更新。 调试器固件中是否可能出现回归?

    Josh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Joshua、

    这一点很难知道。 您是否还记得更新的固件更新版本以及最新版本? 另外、请检查探头是否仍然工作(刷写、UART 输出)、以验证它是否未以某种方式损坏。

    我将等待您的更新。

    此致、

    Arthur

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Arthur、

    遗憾的是、我没有从交换机之前记录固件版本。 探头仍可用于加载固件和调试。 我不知道 UART 是否正常工作、但我可以擦洗一些东西来测试它。 我会报告从中发现的结果。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Arthur、我将另一个串行端口连接到 XDS110、并验证我能够在应用/用户串行实例上双向传递数据、并在辅助数据端口上传入数据、因此 XDS 110在这方面似乎按预期工作。

    Josh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Arthur、

    是否有进一步措施来跟踪 Sitara 上的 UART 问题? 这肯定是在新的发行版中发生的。

    还有,为什么12.9发行版在启动时遭受内核恐慌?

    Josh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Joshua、

    我们目前正在构建大规模的测试设置、我最终可以将其用于15.4错误复制。 从内核错误开始、似乎它与某些 DDR 时序问题有关。

    此致、

    Arthur

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Arthur、

    我认为构建环回测试来隔离测试 UART 可能会有用。  我想仅使用控制台 UART、因为我不必修改电路板、并将 Tx 环回到 Rx。 然后、我将发送结构化数据并验证我是否获得了相同的数据。 通过这种方式、可以识别间隙、重复和其他错误。

    就此向您提出的问题:

    1.) 您知道控制台 UART 与连接到1352的 UART 有何不同吗?

    2.) 您知道是否有我可以使用的预罐头吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我今天有机会再次尝试、我注意到、虽然 SWO 引脚发生了一些变化、但最短脉冲持续时间~ 20us、远远超过12m 位/秒波特率下的值 有什么想法为什么会发生这种情况?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Joshua、

    我不确定,但这可能是因为 SWO 输出是曼彻斯特编码? 因此会产生更多的边沿? 我们应该能够在 SysConfig 设置中进行检查。

    此致、

    Arthur

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我尚未选择曼彻斯特编码选项。 我该怎么办? 当我让它与收集器一起工作时、我以前没有这样做。

    Josh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Joshua、

    您可以按原样保留它。  

    顺便说一下、我觉得我们在这里有点盲目、您可以分享哪些示波器捕获结果或逻辑跟踪吗?  

    随着新内核中的新 UART 驱动程序、与6.6内核相比、行为是否真的没有区别? 这将是真正令人失望的。

    此致、

    Arthur

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Arthur、

    我在这里没有时间处理跟踪问题、其他事情更加紧迫。 但当我这样做时、我会得到一条迹线。 不过、SWO 引脚上信号的时间标度完全错误、12 μ s 长的脉冲是我见过的最短脉冲。

    转到 UART 问题:

    我在旧版与新版的行为上没有任何区别。 我已经使用控制台 UART 实施了环回测试、现在我已经连续运行了大约一天半。 我在该测试中看到了任何类型的0错误。 环回会发送一个包含非重复字符的~100字节数据包、并接收该数据包、检查结果匹配情况、然后发送另一个。 Tx 和 Rx 是交错的、因此有接近连续 Rx 和 Tx。

    所以,这让我有一些问题:

    1. 在本例中、问题似乎与 UART 或其驱动程序无关、而是协处理器基础设施中更高的问题。
    2. 考虑到与 FTDI 电缆一起使用时没有出现问题、但使用了本机 UART、这个问题似乎受到两种 UART 实现之间某些差异的影响、可能是 FTDI 情况下更大的缓冲器的影响?
    3. 频繁地为 UART 提供服务时是否会出现问题、从而导致溢出或溢出?

    如果您愿意、我可以向您发送我用于执行环回的 python 代码、以及有关如何在该 UART 上禁用登录控制台以使其可以运行的注释。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我使用了以下命令:

    import serial
    import threading
    import queue
    import time
    
    
    # Read lines, compare to expected line, if not correct exit with error messsage.
    # if correct, put to the queue to signal the tx thread to send another.
    def RxThreadFxn(serial, ts, Q):
       global keepRunning
       global c
       c  = 0
       while True:
          Q.put(True)
          c += 1
          
          result = s.readline()
          if result != ts:
             print("Error after %d messages."%c)
             print("Actual line:  %s"%result)
             print("Expected line:%s"%ts)
             keepRunning = False
             exit()
    
    # Send one test message each time Q is posted. If the queue isn't posted for a second, that's an error.      
    def TxThreadFxn(serial, ts, Q):
       global keepRunning
       while True:
          s.write(teststring)
          try:
             Q.get(block = True, timeout = 1.0)
          except:
             print("Failed to get message to send another, probable failure to rx line.")
             keepRunning = False
             exit()
    
    
    if __name__ == '__main__':
       global keepRunning
       global c
       
       keepRunning = True
       s = serial.Serial('/dev/ttyS2', 480600) # , timeout = 0.01
       gatingQ = queue.Queue()
       teststring = b"Testing0102034405060708091011121314151617181920212223242526272829303132333435363738394041424344\n"
       
    
       RxThread = threading.Thread(target=RxThreadFxn, daemon = True, args=(s, teststring, gatingQ))
       TxThread = threading.Thread(target=TxThreadFxn, daemon = True, args=(s, teststring, gatingQ))
       RxThread.start()
       TxThread.start() 
    
       while keepRunning == True:
          time.sleep(10.0)
          print("Count = %d."%c)
       TxThread.join()
       RxThread.join()   
    
    sudo systemctl mask serial-getty@ttyS2.service

    关闭 ttyS2上的登录 Getty。

    然后这个脚本执行 UART。

    import serial
    import threading
    import queue
    import time
    
    
    # Read lines, compare to expected line, if not correct exit with error messsage.
    # if correct, put to the queue to signal the tx thread to send another.
    def RxThreadFxn(serial, ts, Q):
       global keepRunning
       global c
       c  = 0
       while True:
          Q.put(True)
          c += 1
          
          result = s.readline()
          if result != ts:
             print("Error after %d messages."%c)
             print("Actual line:  %s"%result)
             print("Expected line:%s"%ts)
             keepRunning = False
             exit()
    
    # Send one test message each time Q is posted. If the queue isn't posted for a second, that's an error.      
    def TxThreadFxn(serial, ts, Q):
       global keepRunning
       while True:
          s.write(teststring)
          try:
             Q.get(block = True, timeout = 1.0)
          except:
             print("Failed to get message to send another, probable failure to rx line.")
             keepRunning = False
             exit()
    
    
    if __name__ == '__main__':
       global keepRunning
       global c
       
       keepRunning = True
       s = serial.Serial('/dev/ttyS2', 480600) # , timeout = 0.01
       gatingQ = queue.Queue()
       teststring = b"Testing0102034405060708091011121314151617181920212223242526272829303132333435363738394041424344\n"
       
    
       RxThread = threading.Thread(target=RxThreadFxn, daemon = True, args=(s, teststring, gatingQ))
       TxThread = threading.Thread(target=TxThreadFxn, daemon = True, args=(s, teststring, gatingQ))
       RxThread.start()
       TxThread.start() 
    
       while keepRunning == True:
          time.sleep(10.0)
          print("Count = %d."%c)
       TxThread.join()
       RxThread.join()   
    

    请注意、在引导完成之前、切勿在控制台连接器上的 Rx 和 Tx 引脚之间安装跳线、这很重要、因为环回会混淆引导过程。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Joshua、

    感谢您提供的脚本。 看看您的结果、我想知道 Python 脚本的吞吐量是否不足以真正给 UART 带来压力。

    如果使用 C/C+++/Rust (称为本机内核接口)进行这样的环回测试、我们会看到一些东西。

    此致、

    Arthur

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Arthur、

    我观察到示波器上的串行流量、它的利用率超过90%、只有很短的间隙。 我想这是轻微的可能性,差距是较短可能会有所不同,但它实际上似乎不太可能。

    Josh