概述
- 串口驱动和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工具
未完待续…