6

我的大脑被炸了,所以我想我会把这个传给社区。

当向我的嵌入式系统发送 1 个字符时,它始终认为它收到了 2 个字符。第一个接收到的字符似乎映射到传输的字符(以某种未知的方式),第二个接收到的字符总是 0xff。

这是我观察到的:

Tx char (in hex)    Rx character (in hex), I left out the second byte (always ff)
31                    9D
32                    9B
33                    99
61                    3D
62                    3B
63                    39
64                    37
65                    35
41                    7D
42                    7B
43                    79

我检查了我的时钟,它们似乎没问题。这个非工作版本和以前的版本之间的唯一区别是我现在使用的是 RS485 芯片。

我已经将信号一直跟踪到 MCU,它看起来很好(确认了 RX 引脚上的位值)

4

3 回答 3

9

第一个接收到的字符似乎映射到传输的字符(以某种未知的方式)

在每种情况下,TX 字节都会左移 1 位,然后反转。

例如:

31 = 00110001 9D = 10011101

0x31 << 1 = 01100010

01100010 的补码是 0x9D

我检查了其他几个,看起来对他们来说都是一样的。我不知道第二个字节是从哪里来的,但这可能是正在发生的信号反转的结果。

RS485 使用差分信号。闻起来就像您使用了芯片的反相输出并插入了 RS232 输入。

我已经将信号一直跟踪到 MCU,它看起来很好(确认了 rx 引脚上的位值)

您使用什么信号作为接地参考?

于 2010-04-14T03:24:36.717 回答
1

RS485 在电气级别上与 RS232 完全不同(差分与单端以及 +/-6V 与 +15/-3V) - 您的通信链路的两端是否使用相同的协议?

于 2010-04-13T22:52:57.360 回答
1

如果是 RS485,您是否正确设置了总线的“默认状态”?正确的停止位数量如何?

于 2010-04-14T02:03:35.490 回答