PSoC™ 5 个 UART“跳过”4 位,然后在下一个字节上出现停止位错误

公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Translation_Bot
Community Manager
Community Manager
Community Manager

我在 PSoC™ 5LP 上的 UART 遇到了一个奇怪的间歇性问题(使用 CY8CKIT-059 eval TDA5235_868_5_BOARD),看起来 UART 组件似乎丢失或跳过了串行数据的 4 位,然后在下一个字节上,如果它认为是停止位的中间位不是 1(否则它会得到错误的值)。

我在 ISR 中加入了调试标志,我可以看到中断延迟了 4 位(芯片上没有其他东西可以造成任何延迟或延迟),而且中断发生在 57600 和 1 Mbps 的速度下

当它与“SMART_ADVENT_CALENDAR”舵机通信时会发生这种情况,但是如果我将其重新配置为“环回”,那么它似乎不会发生。

我尝试在 POWER_DRILL2GO 轨上添加更多的去耦电容,但没有帮助。

我附上了示波器追踪信息。 黄色轨迹是串行数据,蓝色轨迹是 ISR 标志,一旦检测到停止位错误,绿色轨迹就会变为高电平。

你可以看到固定间距,直到停止位标志变高之前的字节。 看起来 UART 确实只是跳过了一些片段。

有任何想法或想法吗?

谢谢。

-迈克尔

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/PSoC-5-3-1/PSoC-5-UART-skipping-4-bits-and-then-getting-a-stop-bit-error-on-next-byte/td-p/671663

0 点赞
6 回复数
Translation_Bot
Community Manager
Community Manager
Community Manager

迈克尔,

你愿意在论坛上分享你的项目吗?

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/PSoC-5-3-1/PSoC-5-UART-skipping-4-bits-and-then-getting-a-stop-bit-error-on-next-byte/m-p/671688

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

感谢您的回复,很抱歉延迟了,被一些闪亮的物体分散了注意力。

我正在附上该项目的档案。 真的很感激你的帮助!

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/PSoC-5-3-1/PSoC-5-UART-skipping-4-bits-and-then-getting-a-stop-bit-error-on-next-byte/m-p/677736

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

迈克尔,

这是我第一次有机会回到这个论坛。

我已经下载了您的项目,虽然我自己可能无法重现您的问题(我没有所需的外部硬件),但我已经开始分析您的项目。

我发现有几个潜在问题可能会导致你的问题。

一般来说,按照计算机标准,UART 协议是一种 "古老 "的通信协议。 它 "假定 "两端的时钟速率为",协议为" 。 这样做的目的是简化比特的序列化,不需要第二个时钟信号(如 SPI 和 I2C)。

如果 Tx UART 数据频率与 Rx UART 数据频率不同,则会出现位偏移定时延迟。 通常情况下,采用 8 倍过采样和 8N1 的 UART 可以承受约 3% 至 4% 的频率差。 每个数据字节起始位的下降沿旨在尝试重新同步 Tx 和 Rx UART 的两个时钟。

UART 数据表中对 STA(静态定时分析)误差计算进行了相当详细(复杂)的讨论,并提供了一些交流定时规范。

请参阅"如何将 STA 结果用于特征数据" 部分的 UART 数据表。

根据您的情况,请检查以确保PSoC™ UART Servo_UART 和 Servo_Rx_UART 与外部伺服系统通信的数据速率(波特率)频率差异。 两端可能没有预期的那么接近。

您可以做的一件事是在示波器上查看信号 ServoSerialIn。 运行时,捕获一个字节的数据,并测量起始位失效边沿与停止位上升边沿之间的时序。 该时序代表来自外部伺服设备的 9 位 "单元"(8 个数据位 + 1 个起始位)通信。 以精确的 1Mbps 速率计算,应为 9 分钟。 这应该是外部伺服的 Tx 输出。

接着,测量 Servo_Tx 信号的一个字节。 以精确的 1Mbps 速率计算,应为 9 分钟。 这是PSoC™的 Tx 输出,

PSoC™ Tx 和伺服 Tx 之间的实际时序差异应该能让您了解各自使用的内部数据速率。记住,为了安全起见,差值不要超过 +/- 3%。

需要注意的一件事:您说:“当它与‘ SMART_ADVENT_CALENDAR ’伺服系统通信时会发生这种情况,但如果我将其重新配置为‘环回’,那么它似乎不会发生。”

你的发言让我更有信心,我的方向是正确的。 当您环回 Servo_Tx 到 ServoSerialIn 时,您会将信号保留在PSoC™中。 由于 Servo_UART 和 Servo_Rx_UART 共享完全相同的时钟,因此不会出现比特时序滑动(即:......)。 频率数据差 = 0)。 因此,不会出现 Servo_Rx 错误。

作为可能的改进,我从三个方面对您的项目进行了修改。

  • 将时钟 1 设置为 16MHz。
  • 将 Servo_UART 和 Servo_Rx_UART 设置为 16 倍超采样。 这将改善位元单元的抽取。
  • 将TESTBOARD_150PC_OUT更改为 64MHz。 这样可以确保时钟 1 的除法误差最小。

附上您的项目。 试试吧

我发现还有其他编译问题。 我稍微改动了你的一些 SW 代码,解决了大部分问题。

让我知道我的修改是否至少 "修复 "了跳位问题。

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/PSoC-5-3-1/PSoC-5-UART-skipping-4-bits-and-then-getting-a-stop-bit-error-on-next-byte/m-p/695893

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨,@tallmike

您是否尝试在 UART 线路上的MULTICH_CONNECT_PCB上拉一些上拉电阻(1k - 3k 欧姆)。 您能试试这个方法,并告诉我在您那里是否奏效吗?

热烈的问候,
Gautami J

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/PSoC-5-3-1/PSoC-5-UART-skipping-4-bits-and-then-getting-a-stop-bit-error-on-next-byte/m-p/695545

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

您好,感谢您查看这个问题并提出建议。 我使用逻辑分析仪和示波器确认波特率非常接近。

与此同时,我又做了一些测试,偶然发现如果使用端口 12 的 6 针和 7 针,就不会出现问题。 由于端口 3 也被模拟子系统使用,因此可能存在一些交互或其他问题。 因此,这也算是一种解决方案,虽然不是很令人满意!

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/PSoC-5-3-1/PSoC-5-UART-skipping-4-bits-and-then-getting-a-stop-bit-error-on-next-byte/m-p/697093

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

迈克尔,

我刚刚注意到您已将ServoSerialIn 分配给 P12.7。如果 KitProg COOLDIM_PRG_BOARD仍连接到 CY8CKIT-059 COOLDIM_PRG_BOARD ,这可能是一个问题。

KitProg COOLDIM_PRG_BOARD具有特殊的接口电路,允许目标COOLDIM_PRG_BOARD将 Tx 数据发送到 KitProg。 这种电路可能会产生一些模拟效果,尤其是在数据传输速率较高的情况下。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/PSoC-5-3-1/PSoC-5-UART-skipping-4-bits-and-then-getting-a-stop-bit-error-on-next-byte/m-p/697120

0 点赞