本文檔介紹迅為RS485模塊測試?yán)蹋ㄟ^ioctl控制模塊數(shù)據(jù)傳輸方向的時間間隔修改 方法。 適用迅為iTOP-4412開發(fā)板丨4418開發(fā)板丨6818開發(fā)板丨IMX6開發(fā)板 本文檔以 iTOP-4412 開發(fā)板的 RS485 模塊為例,其它系列開發(fā)板 RS485 模塊在底板 上,硬件原理和驅(qū)動代碼是一模一樣的。如下圖所示,串口轉(zhuǎn) RS485 的模塊為 “SN65HVD3082”,pin2 和 pin3 管腳,用于控制 RS485 發(fā)送和接收的方向。 在 RS485 的 C 測試?yán)讨�,ioctl 控制的 RS485 設(shè)備節(jié)點為“/dev/max485_ctl_pin” 設(shè)備節(jié)點賦值的代碼為: 設(shè)備節(jié)點賦值的代碼為:char *max485_ctl = "/dev/max485_ctl_pin"; 如下圖所示,函數(shù)“prepare_to_send”和“prepare_to_recv”,RS485 模塊在準(zhǔn)備發(fā) 送和接收數(shù)據(jù)前,都需要調(diào)用對應(yīng)的發(fā)送準(zhǔn)備函數(shù)和接收準(zhǔn)備函數(shù),其中控制發(fā)送和接收的, 就是 RS485 模塊“SN65HVD3082”的 pin2 和 pin3 管腳,控制 pin2 和 pin3 的高低就可以 控制方向。 如果用戶自己更新 RS485 的應(yīng)用程序,會發(fā)現(xiàn)這個管腳高低電平切換最少需要 100ms, 不能短于這個時間。 ioctl 函數(shù)就涉及到 RS485 驅(qū)動,RS485 模塊的驅(qū)動是內(nèi)核源碼下的 “drivers/char/max485_ctl.c”文件。RS485 驅(qū)動文件中,ioctl 相關(guān)代碼如下所示。 如上代碼所示,紅色部分是導(dǎo)致上層應(yīng)用調(diào)用 ioctl 間隔至少 100ms,硬件管腳高低切換 至少為 100ms 的原因。 如果用戶切換數(shù)據(jù)發(fā)送和接收的狀態(tài)少于 100ms,可以將其 mdelay(100);注釋,然后重 新編譯內(nèi)核鏡像燒寫到開發(fā)板。但是請務(wù)必注意的是,發(fā)送和接收之間切換的時候,請務(wù)必在 應(yīng)用程序中根據(jù)實際情況給一定的延時,延時的大小,用戶需要根據(jù)自己實際應(yīng)用來調(diào)整,否 則會出現(xiàn)丟數(shù)據(jù)的情況。
|