我知道9-bit
使用奇偶校验位Linux
可以进行MARK/SPACE parity mode
串行通信。
有些Linux版本提供MARK/SPACE parity mode
,因此我可以轻松设置奇偶校验位。
但据我所知,这个MARK/SPACE parity mode
不是Linux标准,因此Linux可能不支持这种模式。
我如何检查我使用的Linux是否支持该模式?
我是否必须制作一些代码并进行测试?
我想知道没有这些额外的工作。
通过检查配置信息或内核源代码的方式吗?
而且,如果Linux不支持ubuntu12.04
,有没有办法让它支持?
实际上,在ubuntu14.04
中,它受到支持,但当我尝试使用ubuntu14.02
时,似乎在我测试时不支持。
(如果lxde
使用embedded
中的MARK/SPACE parity
)
================== EDIT =====================
这里的 termios
位意味着我可以使用带有CMSPAR
标志PARODD
的9位。
如何检查此标志是否可用于9位通信。 如果没有,可以采用任何方式激活此功能。
否则我必须检查我发送的偶数和奇数奇偶校验的每个字节,然后更改奇偶校验模式以使用9位。
但是,如果我可以使用CMSPAR标志,我只需设置CMSPAR
将奇偶校验位设置为MARK/SPACE parity
,而不管我发送的数据。
公司称硬件支持9bit。
This是关于too many output argument
的说明。
答案 0 :(得分:0)
标记奇偶校验与发送2个停止位(cflag CSTOPB)相同,因为停止位是逻辑1(负线电压),其长度与数据/奇偶校验位相同
空间奇偶校验是计算要发送的字节的奇偶校验的问题,然后在发送之前选择将导致其为逻辑0的奇偶校验方法。
因此,最好通过将第9位设置为0(而不是1)来指示发送的字节是一个地址(因为它需要更多的cpu周期来设置),因此寻址(这是最常用的事情)将其设置为0;然后只使用1表示中间的所有数据有效负载,并且在几次更改寻址单元时使用0。
接收可以在任何硬件上以与Linux完全兼容的方式完成。但它限制了当第9位(=奇偶校验位= 2个停止位中的第一个)为逻辑0时产生奇偶校验错误的地址的可能地址数
因此,如果带有标准硬件的Linux机箱也是一个监听器,而不是仅仅发送数据,那么总线上最多可以有128个地址(设备组)。
另见:Is it possible to use 9-bit serial communication in Linux?
CMSPAR的记录,似乎不是任何实际标准的一部分。 (但话又说回来,其余的大部分都没有 - 令人惊讶......毕竟那些年来linux仍然无法完成30年前装配过程中实际硬件所能完成的事情的一半)甚至那就是紧张不安和bug(要求sync()或O_SYNC甚至在可接受的时间范围内处理,不能设置非标准波特率等)。但是,嘿。回到内核支持你的usb 3咖啡杯架。比rs232和以太网更重要。