linux uart驱动分析,技术文章:基于Linux的tty架构及UART驱动详解

uart driver在调用接口前,要手动设置uart_port的操作uart_ops,使得通过调用uart_add_one_port接口后驱动完成硬件的操作接口注册。uart添加port流程如图3-4所示:

011df62759bc64cf57d3900962ba1e01.png

图3-4 uart添加port流程图2.4.数据收发流程2.4.1.打开设备(open操作)

open设备的大体流程如图3-5所示:

ab92ebb6ca26eea846b21bee03f950f3.png

图3-5 open设备流程2.4.2.数据发送流程(write操作)

发送数据大体流程如图3-6所示:

9dbee51c34ef42662e1067192d458877.png

图3-6 发送数据流程2.4.3.数据接收流程(read操作)

接收数据的大体流程如图3-7所示:

9786c433eec7f3ca7d7bb139ad1275bf.png

图3-7数据接收流程2.4.4.关闭设备(close操作)

close设备的大体流程如图3-8所示:

2c922b2d5088de9efc0e001c70c98409.png

图3-8 close设备流程2.4.5.注销流程2.4.5.1.移除uart_port

此接口用于从uart driver上注销一个uart port,该接口在uart driver中的remove函数中调用。uart移除port的流程如图3-9所示:

cad3346ceb0a0274f987c36ea0043b01.png

图3.9 uart移除port流程图2.4.5.2.注销uart_driver

此接口在uart driver中调用,用来从kernel中注销uart_driver,调用阶段在uart driver的退出阶段,例如:module_exit(),uart driver的注销流程如图3.10所示

0d226f1af2d687abe019f4278211c07c.png

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半双工功能,电路如图所示:

c263d3c812cd65cc0590bf080016ba6e.png

接收:默认没有数据时,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’,完成高电平的传输。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值