有點奇特的問題:dC++串行通信的linux 9data比特
我編程C++中的ubuntu 10和我需要編碼,它使用9個數據位中串行通信的MDB(多站總線)協議(YES 9個數據位:D)
某些驅動程序在某些uart芯片上支持9個數據位,但大多數不支持。
簡要解釋: mdb使用8個數據位和9個數據位進行模式設置。 因此,當主機發送第一個BYTE時,它將mode = 9thbit設置爲1,這意味着總線上的所有器件都會中斷並正在尋找保存器件地址的第一個字節。 如果偵聽設備(許多中的一個)在第一個字節中發現它的地址,它就知道以下字節將是它的數據字節。數據字節已位9 =模式位設置爲0
例如以位:000001011 000000010 000000100 000000110(1stbyte地址和3個數據字節)
從從站的返回的情況 - >主模式比特被用於端傳輸。 所以主從串口讀取這麼長時間,直到它發現有9位9位的數據包= 1 usualy最後的9位序列是CHK字節+模式= 1
所以最後我的問題:
我知道如何給termios中的用戶CMPAR標誌以使用奇偶校驗位作爲模式位,例如。其設置要麼MARK(1)或SPACE(0)
例如對於這一切不知道如何:
如果這如果不是在termios的可能不支持定義首先檢查:
# define CMSPAR 010000000000 /* mark or space (stick) parity */
用於標記或空間奇偶校驗的代碼例如。模擬第9位數據
struct termios tio;
bzero(&tio, sizeof(tio));
tcgetattr(portFileDescriptor, &tio);
if(useMarkParity)
{
// Send with mark parity
tio.c_cflag |= PARENB | CMSPAR | PARODD;
tcsetattr(portFileDescriptor, TCSADRAIN, &tio);
}
else
{
// Send with space parity
tio.c_cflag |= PARENB | CMSPAR;
tio.c_cflag &= ~PARODD;
tcsetattr(portFileDescriptor, TCSADRAIN, &tio);
}
write(portFileDescriptor,DATA, DATALEN);
現在我不知道如何設置奇偶校驗的接收,我已經試過幾乎所有的組合,我不能得到這個錯誤校驗字節序列。
誰能幫助我如何設置奇偶校驗的接收,它不會忽略奇偶校驗,不剝離字節,但它的「壞」接收的字節之前添加DEL:
因爲它在POSIX串行幫助
說INPCK和PARMRK如果啓用IGNPAR,則在每個有奇偶校驗錯誤的字符之前發送一個NUL字符(000八進制)爲 。 否則,DEL(177八進制)和NUL字符與 一起發送不良字符。
那麼如何正確設置PARMRK和INPCK,它會檢測模式位= 1個的奇偶校驗位錯誤,並插入DEL返回流中的177進制。
謝謝:d
所以傳輸工作?我也在做Linux,但只關心傳輸。你確定一個字節一個字節的奇偶校驗是否有效,FIFO的設置如何?你正在使用哪種芯片? – Splash