本文檔介紹迅爲RS485模塊測試例程,經過ioctl控制模塊數據傳輸方向的時間間隔修改 方法。函數
適用迅爲iTOP-4412開發板丨4418開發板丨6818開發板丨IMX6開發板測試
本文檔以 iTOP-4412 開發板的 RS485 模塊爲例,其它系列開發板 RS485 模塊在底板 上,硬件原理和驅動代碼是如出一轍的。以下圖所示,串口轉 RS485 的模塊爲 「SN65HVD3082」,pin2 和 pin3 管腳,用於控制 RS485 發送和接收的方向。blog
在 RS485 的 C 測試例程中,ioctl 控制的 RS485 設備節點爲「/dev/max485_ctl_pin」 設備節點賦值的代碼爲:開發
設備節點賦值的代碼爲:char *max485_ctl = "/dev/max485_ctl_pin";文檔
以下圖所示,函數「prepare_to_send」和「prepare_to_recv」,RS485 模塊在準備發 送和接收數據前,都須要調用對應的發送準備函數和接收準備函數,其中控制發送和接收的, 就是 RS485 模塊「SN65HVD3082」的 pin2 和 pin3 管腳,控制 pin2 和 pin3 的高低就能夠 控制方向。源碼
若是用戶本身更新 RS485 的應用程序,會發現這個管腳高低電平切換最少須要 100ms, 不能短於這個時間。io
ioctl 函數就涉及到 RS485 驅動,RS485 模塊的驅動是內核源碼下的 「drivers/char/max485_ctl.c」文件。RS485 驅動文件中,ioctl 相關代碼以下所示。編譯
如上代碼所示,紅色部分是致使上層應用調用 ioctl 間隔至少 100ms,硬件管腳高低切換 至少爲 100ms 的緣由。原理
若是用戶切換數據發送和接收的狀態少於 100ms,能夠將其 mdelay(100);註釋,而後重 新編譯內核鏡像燒寫到開發板。可是請務必注意的是,發送和接收之間切換的時候,請務必在 應用程序中根據實際狀況給必定的延時,延時的大小,用戶須要根據本身實際應用來調整,否 則會出現丟數據的狀況。ioc