技术文章:基于Linux的tty架构及UART驱动详解
uart driver在调用接口前,要手动设置uart_port的操作uart_ops,使得通过调用uart_add_one_port接口后驱动完成硬件的操作接口注册。uart添加port流程如图3-4所示:
图3-4 uart添加port流程图2.4. 数据收发流程2.4.1. 打开设备(open操作)
open设备的大体流程如图3-5所示:
图3-5 open设备流程2.4.2. 数据发送流程(write操作)
发送数据大体流程如图3-6所示:
图3-6 发送数据流程2.4.3. 数据接收流程(read操作)
接收数据的大体流程如图3-7所示:
图3-7数据接收流程2.4.4. 关闭设备(close操作)
close设备的大体流程如图3-8所示:
图3-8 close设备流程2.4.5. 注销流程2.4.5.1. 移除uart_port
此接口用于从uart driver上注销一个uart port,该接口在uart driver中的remove函数中调用。uart移除port的流程如图3-9所示:
图3.9 uart移除port流程图2.4.5.2. 注销uart_driver
此接口在uart driver中调用,用来从kernel中注销uart_driver,调用阶段在uart driver的退出阶段,例如:module_exit(),uart driver的注销流程如图3.10所示
2.5. 使用rs485通信2.5.1. rs485和rs232的区别
uart(TTL-3.3V)/rs232(工业级 +-12V)是电压驱动,rs485是电流驱动(能传输更远的距离)rS232用电平表示数据,使用2根线可实现全双工,rs485用差分电平表示数据,因此必须用4根线实现全双工rs485;
全双工:uart-tx 1根线变成rs485-A/B 2根线;uart-rx 1根线变成rs485- X/Y两根线;
rs485半双工: 将全双工的A/B和X/Y合并起来分时复用;rs485-de/re是给转换器的一个控制信号,对我们芯片来说,都是输出;
2.5.2. rs485调试方法:
首先保证uart模块和相关gpio,电压转换芯片工作正常:
a,保证uart tx/rx功能正常。b,用gpio-output来控制 de/re 相关的2个gpio,观察 de/re的gpio输出low/high是否正常c,在b的基础上,单独调试 rs485-tx/rs485-rx,单端调试是否pass.
模式12-gpio-normal-uart-rs485-halfduplex(2个gpio独立控制de/re, enable就是将相关gpio设置到active电平;不用uart控制器的rs485模式;uart控制器处于normal模式)
a, 默认re-en, de-dis,默认rs485-rxb, 当要发送的时候,re-dis, de-enable, 然后uart-tx.c, tx完成之后,de-dis; re-en,进入默认的rs485-rx模式。
模式21-gpio-normal-uart-rs485-halfduplex这个模式的前提条件,外设器件的 de/re必须是相反极性的,比如de是高电平有效,re是低电平有效,则可以用一个gpio,来控制 de/re,此时de/re一定是互斥的。(1个gpio控制de/re, enable就是将相关gpio设置到active电平;不用uart控制器的rs485模式;uart控制器处于normal模式)
a, re-en,进入rs485-rx模式 (re 通常是低电平有效,这一步就是 设置 re对应的gpio为低电平)b, 当要发送的时候,设置gpio:re-disable, de-enable, 然后uart-tx.(re 通常是低电平有效,这一步就是 设置 re对应的gpio为高电平)c, tx完成之后,de-disable; re-enable,进入默认的rs485-rx模式。(re 通常是低电平有效,这一步就是 设置 re对应的gpio为低电平)
模式3rs485-software-halfduplex(de/re 独立输出)(使能uart控制器的rs485模式; 通过uart模块内部reg来控制 de/re 信号)
a,使能uart控制器的 rs485模式,并按照电压转换芯片的特性,设置de/re polarityb, 设置rs485的模式为 sw-half-duplex, 设置 de-timing寄存器; 设置 de/re turnaround 寄存器。c, 默认为rs485-rx模式,设置 de-dis/re-end, 当要tx的时候,设置 de-en/re-dise, 发送完成,设置 de-dis/re-en
模式4rs485-hardware-halfduplex(de/re 独立输出)基本配置同模式3,但是设置 rs485模式为 hardware-halfduplex模式
a, 只要设置 de-en/rx-en 都为1,然后就不用管了,硬件实现半双工切换。
模式5:使用纯硬件的办法实现RS485半双工功能,电路如图所示:
接收:默认没有数据时,UART_TX为高电平,三极管导通,485芯片RE低电平使能,RO接收数据使能,此时从485AB口收到什么数据就会通过RO通道传到MCU,完成数据接收过程。发送:当发送数据时,UART_TX会有一个下拉的电平,表示开始发送数据,此时三极管截止,DE为高电平发送使能。当发送数据‘0’时,由于DI口连接地,此时数据‘0’就会传输到AB口 A-B<0,传输‘0’,完成了低电平的传输。当发送‘1’时,此时三极管导通,按理说RO使能,此时由于还处在发送数据中,这种状态下485处于高阻态,此时的状态通过A上拉B下拉电阻决定,此时A-B>0传输‘1’,完成高电平的传输。
最新活动更多
-
11月28日立即报名>>> 2024工程师系列—工业电子技术在线会议
-
12月19日立即报名>> 【线下会议】OFweek 2024(第九届)物联网产业大会
-
即日-12.26火热报名中>> OFweek2024中国智造CIO在线峰会
-
即日-2025.8.1立即下载>> 《2024智能制造产业高端化、智能化、绿色化发展蓝皮书》
-
精彩回顾立即查看>> 2024 智能家居出海论坛
-
精彩回顾立即查看>> 【在线会议】多物理场仿真助跑新能源汽车
推荐专题
发表评论
请输入评论内容...
请输入评论/评论长度6~500个字
暂无评论
暂无评论