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.
您好!
我正在使用 SDK 2.0.0.4和它2.4.0进行人数统计演示。 我在 MATLAB 上接收数据、发现有时标头校验和不会生成为零。 它会导致我的应用程序崩溃。 我已经打印了类似这样的标头值
标头=[2 1 4 3 6 5 8 7 4 0 2 66 22 10 0 172 48 53 47 10 5 0 66 93 1 0 0 0 0 0 78 0 0 0 27 74 0 164 1 0 182 52 0 0 3 0 163 148]
标题对我来说似乎是正确的、但如果发现校验和不等于零、应用程序在4-5秒后会中断。 我正在使用以下代码检查校验和
h = typecast (uint8 (标头)、'uint16'); a = uint32 (sum (h)); b = uint16 (sum (typecast (a、'uint16'))); CS = uint16 (bitcmp (b));
对于上面的标头、它将生成3个校验和。 尽管如此、标题在 我看来是正确的。 我还打印 了标题的解码值、如下所示
同步报头包括:258、772、1286、1800 版本:33554436 平台661058 时间戳792015020 封装长度1290 帧编号89410 子帧编号0 线性调频脉冲裕量78 帧裕量18971 uartSentTime 420 TrackTime 13494 numTL3 校验和38051
此外、通过 UART 接收数据时、数据似乎会丢失。 UART 波特率为921600。 需要专家的建议。
更新:
我发现大部分时间校验和都在生成3或768。 我刚才发现的另一个奇怪的行为是错误的标头产生了零校验和。 52字节数据后产生零校验和。
标头=[0 187 219 189 110 232 123 190 85 116 110 65 116 81 17 189 90 187 219 189 128 81 17 189 1 146 72 63 223 34 155 64 18 0 0 144 31 199 190 246 65 2 63 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];
我使用大小为52字节的滑动窗口和1字节幻灯片、以了解 UART 异步时有效字节流的起始位置。 但是,我的方法似乎并不是百分之百的愚蠢。 现在、我有两个问题
你好,拉克斯米,
您可以在 task_mbox.c 的267行或 main_pplcount_viz.m 的1164行看到校验和创建过程。
步骤如下:
由于您显示的示例代码是 MATLAB 的摘录、我认为您的技术不是问题、因此您似乎正在执行上述步骤。
从您显示的标头数据中、您似乎没有找到魔术编号。 标头将始终以8字节幻数开头、这在 MATLAB 中看起来是如此[2 1 4 3 6 5 8 7]。 要查找报头的开头、您需要扫描 UART 数据以找到该神奇字。 然后、将魔术字作为标头的一部分、并计算校验和。
此致、
Justin
您好 Justin、
是的、我执行的校验和与 TI 建议的完全相同。 它是相同的代码。 我认为我已经理解了问题第2点的答案、但第1点仍未得到回答。
此外、我还在 tast_mbox.c 中寻求修改该线路的呼叫频率的建议
Semaphore_pend (gMmwMssMCB.mboxSemHandle、BIOS_WAIT_FOREVE);
有时、我会 使标头同步、但有时会失去同步。 一旦代码丢失 同步、它将再次进入同步查找模式。 您能不能深入了解一下。
你好,拉克斯米,
请执行以下操作-通过增加帧周期来降低器件的帧速率:
帧配置0 1 128 0 200 1 0
跟踪配置1 2 250 20 200 90
这会将每个帧设置为200ms、因此您将达到5fps。 使用这些设置运行演示、以确定较低的帧速率是否会解决数据损坏的问题。 如果这可以解决此问题、您可以在发送 TLV 之前检查帧编号。 您可以决定每4或5帧发送一次、以减少 UART 上的负载。 如果是这种情况、如果您使用默认 GUI、我仍然建议在每帧中发送一个帧头、因为它希望按顺序查看帧。
此致、
Justin
谢谢 Justin。 将为您提供最新信息。
您好 Justin、
我发现我在接收端遇到问题 感谢你的帮助。