订阅
纠错
加入自媒体

技术文章:基于Linux的tty架构及UART驱动详解

2021-02-05 17:06
一口Linux
关注

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’,完成高电平的传输。

<上一页  1  2  3  4  下一页>  余下全文
声明: 本文由入驻维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。

发表评论

0条评论,0人参与

请输入评论内容...

请输入评论/评论长度6~500个字

您提交的评论过于频繁,请输入验证码继续

暂无评论

暂无评论

    人工智能 猎头职位 更多
    扫码关注公众号
    OFweek人工智能网
    获取更多精彩内容
    文章纠错
    x
    *文字标题:
    *纠错内容:
    联系邮箱:
    *验 证 码:

    粤公网安备 44030502002758号