参考:https://blog.csdn.net/sbddbfm/article/details/100883650
SDK默认只打开了uart0,但我实际上要用三个串口。
ls /dev/ttyAMA*可以看到:
/dev/ttyAMA0 /dev/ttyAMA1
看实际只有ttyAMA0可以用,也就是上电默认的终端
使用echo测试:
~ # echo 123 > /dev/ttyAMA0
123
~ # echo 123 > /dev/ttyAMA1
can not create file:/dev/ttyAMA1
首先看内核配置文件arch/arm/boot/dts/hi3516ev300.dtsi:
uart0: uart@12040000 {
compatible = “arm,pl011”, “arm,primecell”;
reg = <0x12040000 0x1000>;
interrupts = <0 7 4>;
clocks = <&clock HI3516EV300_UART0_CLK>;
clock-names = “apb_pclk”;
status = “disabled”;
};
uart1: uart@12041000 {
compatible = “arm,pl011”, “arm,primecell”;
reg = <0x12041000 0x1000>;
interrupts = <0 8 4>;
clocks = <&clock HI3516EV300_UART1_CLK>;
clock-names = “apb_pclk”;
status = “disabled”;
};
uart2: uart@12042000 {
compatible = “arm,pl011”, “arm,primecell”;
reg = <0x12042000 0x1000>;
interrupts = <0 9 4>;
clocks = <&clock HI3516EV300_UART2_CLK>;
clock-names = “apb_pclk”;
status = “disabled”;
};
可见是有个串口的,但都是disable的状态,其实起作用的是另一个文件: arch/arm/boot/dts/hi3516ev300-demb.dts:
&uart0 {
status = “okay”;
};
所以再copy两份就可以了,在下面添加:
&uart1 {
status = “okay”;
};
&uart2 {
status = “okay”;
};
重新编译内核,下载到目标板,启动后ls /dev/ttyAMA*可以看到:
/dev/ttyAMA0 /dev/ttyAMA1 /dev/ttyAMA2
echo测试都可以成功,但与实际串口相连的设备没有收到数据,查资料得知,还得配置引脚复用寄存器。
使用hisi工具btools,具体使用方法可参考另一文章:
我的板子串口发送接在E1脚
查文档如下:
默认值为0x1E00,应该修改为0x1E04
使用himd.l读取寄存器的值:
~ # himd.l 0x120C0014
*** Board tools : ver0.0.1_20121120 ***
[debug]: {source/utils/cmdshell.c:168}cmdstr:himd.l
====dump memory 0x120C0014====
0000: 00001e00 00001d00 00001400 00001d00
0010: 00000000 00000000 00000000 00000000
0020: 00000000 00000000 00000000 00000000
0030: 00000000 00000000 00000000 00000000
0040: 00000000 00000000 00000000 00000000
0050: 00000000 00000000 00000000 00000000
0060: 00000000 00000000 00000000 00000000
0070: 00000000 00000000 00000000 00000000
0080: 00000000 00000000 00000000 00000000
0090: 00000000 00000000 00000000 00000000
00a0: 00000000 00000000 00000000 00000000
00b0: 00000000 00000000 00000000 00000000
00c0: 00000000 00000000 00000000 00000000
00d0: 00000000 00000000 00000000 00000000
00e0: 00000000 00000000 00000000 00000000
00f0: 00000000 00000000 00000000 00000000
[END]
寄存器的值还是默认值,修改它:
~ # himm 0x120C0014 0x00001e04
*** Board tools : ver0.0.1_20121120 ***
[debug]: {source/utils/cmdshell.c:168}cmdstr:himm
0x120C0014: 0x00001E00 –> 0x00001E04
[END]
再次echo测试:
~ # echo 123 > /dev/ttyAMA2
不成功,为什么呢?收发接反了!!!再次尝试,乱码,波特率不对,初始波特率是9600
信号 | UART1_TXD | UART1_RXD | UART2_TXD | UART2_RXD |
---|---|---|---|---|
引脚 | F17 | F16 | E1 | D2 |
寄存器地址 | 0x100C000C | 0x100C0010 | 0x120C0014 | 0x120C0010 |
寄存器初始值 | 0x1000 | 0x1000 | 0x1E00 | 0x1E00 |
寄存器设定值 | 0x1002 | 0x1002 | 0x1E04 | 0x1E04 |