基于Linux的tty架构及UART驱动详解 (5)

5、注册tty_driver。
注册uart_driver实际上是注册tty_driver,与用户空间打交道的工作完全交给tty_driver,这一部分是内核实现好的不需要修改

2.3.1.2. 添加uart_port

此接口用于注册一个uart port 到uart driver上,通过注册,uart driver就可以访问对应的uart port,进行数据收发。该接口在uart driver中的probe函数调用,必须保证晚于uart_register_drver的注册过程。

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所示

基于Linux的tty架构及UART驱动详解

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.

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpdgsp.html