iTOP-4418开发板-驱动-RS485模块ioctl操作时间间隔修改

本文介绍迅为RS485模块在iTOP-4412等开发板上的测试例程,详解通过ioctl控制数据传输方向及时间间隔的方法。涉及RS485设备节点赋值,发送接收准备函数,以及驱动源码中控制管脚切换时间的代码解析。

本文档介绍迅为RS485模块测试例程,通过ioctl控制模块数据传输方向的时间间隔修改 方法。

适用迅为iTOP-4412开发板丨4418开发板丨6818开发板丨IMX6开发板

本文档以 iTOP-4412 开发板的 RS485 模块为例,其它系列开发板 RS485 模块在底板 上,硬件原理和驱动代码是一模一样的。如下图所示,串口转 RS485 的模块为 “SN65HVD3082”,pin2 和 pin3 管脚,用于控制 RS485 发送和接收的方向。

news2018083001.jpg

在 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, 不能短于这个时间。

news2018083002.jpg

ioctl 函数就涉及到 RS485 驱动,RS485 模块的驱动是内核源码下的 “drivers/char/max485_ctl.c”文件。RS485 驱动文件中,ioctl 相关代码如下所示。

news2018083003.jpg

news2018083004.jpg

如上代码所示,红色部分是导致上层应用调用 ioctl 间隔至少 100ms,硬件管脚高低切换 至少为 100ms 的原因。

如果用户切换数据发送和接收的状态少于 100ms,可以将其 mdelay(100);注释,然后重 新编译内核镜像烧写到开发板。但是请务必注意的是,发送和接收之间切换的时候,请务必在 应用程序中根据实际情况给一定的延时,延时的大小,用户需要根据自己实际应用来调整,否 则会出现丢数据的情况。

转载于:https://my.oschina.net/u/3005926/blog/2048683

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值