【linux开发-驱动】-RS232/485相关
前言:
根据电平的不同,串口分为TTL和RS232。不管什么样的接口电平,其驱动程序都是一样的,通过外接RS485这样的芯片就可以将串口转换为RS485信号。
先了解一下linux下UART驱动框架:
1、uart_driver注册与注销
uart_driver 结构体表示 UART 驱动,uart_driver 定义在 include/linux/serial_core.h 文件中
每一个串口驱动都需要定义一个uart_driver,加载驱动的时候通过 uart_register_driver 函数向
系统注册这个 uart_driver,
int uart_register_driver(struct uart_driver *uart)
uart:要注册的 uart_driver。
返回值:0,成功;负值,失败
注销驱动的时候也需要注销掉前面注册的 uart_driver,需要用到 uart_unregister_driver 函数
void uart_unregister_driver(struct uart_driver *uart)
函数参数和返回值含义如下:
uart:要注销的 uart_driver。
返回值:无。
2、uart_port
uart_port 定义在 include/linux/serial_core.h 文件,表示一个具体的port。
每个 UART 都有一个 uart_port,通过uart_add_one_port 函数与uart_driver 结合
int uart_add_one_port(struct uart_driver *reg,struct uart_port*port)
函数参数和返回值含义如下:
reg:此 port 对应的 uart_driver。
port:要添加到 uart_driver 中的 port。
返回值:0,成功;负值,失败。
卸载 UART 驱动的时候也需要将 uart_port 从相应的 uart_driver 中移除,需要用到
uart_remove_one_port 函数
int uart_remove_one_port(struct uart_driver *reg, struct uart_port *port)
函数参数和返回值含义如下:
reg:要卸载的 port 所对应的 uart_driver。
port:要卸载的 uart_port。
返回值:0,成功;负值,失败。
3、uart_ops
ops是uart_port中的结构体指针变量,ops 包含了针对 UART 具体的驱动函数,Linux 系统收发数据最终调用的都是 ops 中的函数。uart_ops 定义在 include/linux/serial_core.h 文件中
编写驱动一般就要写uart_ops,因为 uart_ops 是最底层的 UART 驱动接口,是实实在在的和 UART 寄存器打交道的。
一、RS232驱动相关
1、一般UART驱动ST已经编写好了,我们需要在设备树中添加 串口 对应的设备节点即可
2、移植minicom,类似于串口调试助手,移植到开发板上,一般重新配置一下buildroot,使能minicom就可以了。
打开buildroot图形配置界面:
→ Target packages
→ Hardware handling
[*] minicom
注意RS232连接时,对应的公头和母头。设置好开发板上的跳线帽。
最后使用minicom调试数据。
二、RS485
RS232的窗口驱动程序写好了就不需要编写其他的驱动程序了,直接使用minicom来测试就行
1、修改开发板上的跳线帽
2、使用转换器的RS485与开发板上的RS485相连
3、串口转换器通过 USB 线连接到电脑上
4、配置好minicom就可以收发数据了
参考:正点原子视频资料