Linux 串口驱动与使用

概述

  • 串口驱动和IIC/SPI驱动不同,它没有什么主机端和设备端之分,就只有一个串口驱动。
  • 官网一般会把串口驱动编写好了,我们真正要做的就是在设备树中添加所要使用的串口节点信息。
  • 当系统启动以后串口驱动和设备匹配成功,相应的串口就会被驱动起来,生成/dev/ttyx节点。
  • 移植minicom串口工具,可以很方便的对串口进行读写操作。
  • 虽然串口驱动不需要我们去写,但是串口驱动框架我们还是需要了解的。

实验目的

  • 配置设备树,使能Atmel SAMA5D34型号CPU的串口USART1;
  • 编译设备树,确认串口驱动编译进入内核,下载运行;
  • 查看串口配置,设置串口配置;
  • 通过命令,测试串口的收发;
  • 移植minicom工具。

配置设备树

在设备树中添加串口的设备树,status为”okey”

usart1: serial@f0020000 {
	compatible = "atmel,at91sam9260-usart";
	reg = <0xf0020000 0x100>;
	interrupts = <13 IRQ_TYPE_LEVEL_HIGH 5>;
	dmas = <&dma0 2 AT91_DMA_CFG_PER_ID(5)>,
		   <&dma0 2 (AT91_DMA_CFG_PER_ID(6) | AT91_DMA_CFG_FIFOCFG_ASAP)>;
	dma-names = "tx", "rx";
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_usart1>;
	clocks = <&usart1_clk>;
	clock-names = "usart";
	status = "okay";
};

compatible="atmel,at91sam9260-usart"用于匹配驱动的名字,在内核的drivers目录下可以搜索到相应的驱动。执行搜索:grep -nR “atmel,at91sam9260-usart*”,串口驱动路径为:/drivers/ tty/serial/atmel_serial.c

串口usart1所使用的引脚可以在pinctrl_usart1子节点中查看。检查一下 USART1_TX 和 USART1_RX 这两个引脚有没有被用作其他功能,如果有的话要将其屏蔽掉,保证这两个 IO 只用作 USART1,切记!!!

pinctrl_usart1: usart1-0 {
	atmel,pins =
		<AT91_PIOB 28 AT91_PERIPH_A AT91_PINCTRL_NONE	/* PB28 periph A */
		 AT91_PIOB 29 AT91_PERIPH_A AT91_PINCTRL_PULL_UP>;	/* PB29 periph A with pullup */
};

编译设备树

在内核的根目录下执行make dtbs,生成.dtb目标文件。
检查串口驱动是否编译进入内核:在/drivers/ tty/serial/Makefile可以看到obj-$(CONFIG_SERIAL_ATMEL) += atmel_serial.o,只要根目录下.config文件中” CONFIG_SERIAL_ATMEL=y”串口驱动就会被编译进入内核。
下载设备树过后,进入设备树目录cd /proc/device-tree/,执行find -name “serial*”,可以查找到对应设备树的配置。

串口收发测试

串口生成的节点为/dev/ttyx。具体是tty什么,可以通过驱动查看,本例程中usart1生成节点名/dev/ttyS2。
输入“stty -F /dev/ttyS2 -a”,可查看串口的信息,比如波特率。

# stty -F /dev/ttyS2 -a
speed 115200 baud;stty: /dev/ttyS2
 line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke

输入” stty -F /dev/ttyS2 ispeed 115200 ospeed 115200 cs8”设置串口波特率,停止校验位等等。
执行echo “test” >/dev/ttyS2,可将test字符通过串口发送出去。
执行cat /dev/ttyS2,可接收串口数据并打印出来。
在这里插入图片描述

移植minicom工具

未完待续…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值