0

我知道使用奇偶校验位9-bit可以进行串行通信。Linux

并且一些 Linux 版本提供MARK/SPACE parity mode,所以我可以很容易地设置奇偶校验位。

但据我所知,这MARK/SPACE parity mode不是 Linux 标准,所以 Linux 可能不支持这种模式。

如何检查我使用的 Linux 是否支持该模式?

我必须编写一些代码并进行测试吗?

我想知道没有这些额外的工作。

通过检查配置信息或内核源代码有什么办法吗?

而且,如果Linux不支持MARK/SPACE parity mode,有什么办法让它支持吗?

实际上,在 中ubuntu12.04,它是受支持的,但是当我尝试使用 时ubuntu14.04,它似乎在我测试时不支持。(在ubuntu14.02使用lxdein的情况下embedded

==================编辑=====================

MARK/SPACE paritytermios这里的位意味着我是否可以使用带有标志的 9 位CMSPAR

以及如何检查此标志是否可用于 9 位通信。如果没有,任何激活此功能的方法。

否则我必须检查我发送的每个字节的奇偶校验,然后将奇偶校验模式更改为使用 9 位。

但是,如果我可以使用 CMSPAR 标志,我只需PARODD将奇偶校验位设置为CMSPAR,而不管我发送的数据如何。

并且公司说硬件支持9bit。

是关于 的描述MARK/SPACE parity

4

1 回答 1

0

标记奇偶校验与发送 2 个停止位 (cflag CSTOPB) 相同,因为停止位是逻辑 1(负线电压),其长度与数据/奇偶校验位相同

空间奇偶校验是计算要发送的字节的奇偶校验,然后在发送之前选择会导致其为逻辑 0 的奇偶校验方法。

因此,最好将第 9 位设置为 0(而不是 1)来指示发送的字节是地址(因为它需要更多的 cpu 周期才能将其设置为 0而不是将其设置为 1 ;) 所以只需将 1 用于介于两者之间的所有数据有效负载,而将 0 用于更改寻址单元的几次。

接收可以在任何硬件上以始终与 linux 兼容的方式完成。但是当第 9 位(=奇偶校验位=2 个停止位中的第一个)为逻辑 0 时,它将可能的地址数量限制为产生奇偶校验错误的地址

因此,如果具有标准硬件的 linux 机器也是一个侦听器,而不仅仅是发送数据,那么总线上最多可以有 128 个地址(设备组)。

另请参阅:是否可以在 Linux 中使用 9 位串行通信?

CMSPAR 作为记录,似乎不是任何实际标准的一部分。(但话又说回来,大多数其他 termios 也没有 - 令人惊讶......经过这么多年,Linux 仍然无法完成 30 年前实际硬件在 dos 中可以通过组装完成的一半事情),即使那是紧张不安和窃听(甚至需要在可接受的时间范围内处理 sync() 或 O_SYNC,不能设置非标准波特率等)。但是,嘿。返回到您的 USB 3 咖啡杯架的内核支持。比 rs232 和以太网更重要。

于 2016-03-04T07:14:45.423 回答