hi3516 内核开启UART支持
二)查看串口配置
可以使用linux的stty命令查看串口的配置参数。比如:stty -F /dev/ttyAMA0 -a
同样可以使用stty命令设置串口参数,比如:stty -F /dev/ttyAMA0 ispeed 115200 ospeed 115200 cs8
(三)查看串口数据收发
一般调试串口,我们可以将TX与RT接在一起,自己发数据给自己接收,看数据是否正常。也可以使用cat 查看串口数据或是echo发送数据。
发送数据:
echo "test 1234567890" > /dev/ttyAMA0
接收数据:
cat /dev/ttyAMA0
(四)查看串口硬件分配:
串口的硬件分配状态,比如IO和中断使用情况可以在/proc/tty/driver下的ttyAMA 种查看:
/proc/tty/driver # ls
ttyAMA usbserial
/proc/tty/driver # cat ttyAMA
serinfo:1.0 driver revision:
0: uart:PL011 rev2 mmio:0x12080000 irq:38 tx:119786 rx:254 RTS|DTR|DSR|CD|RI
1: uart:PL011 rev2 mmio:0x12090000 irq:39 tx:48102 rx:0 CTS|DSR|CD|RI
2: uart:PL011 rev2 mmio:0x120A0000 irq:40 tx:8620 rx:55014 CTS|DSR|CD|RI
(五)注意
如果串口的配置和数据的收发命令都能够正常,但是串口的引脚没有电平变化,这个可能是串口的复用功能没有设置,需要设置一下GPIO复用为串口功能。复用功能可以在设备树dts中设置,也可以使用海思的himm命令直接设置:
himm 0x120f0100 0x01 #UART2_RXD
himm 0x120f0104 0x01 #UART2_TXD
————————————————
版权声明:本文为CSDN博主「li_wen01」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/li_wen01/article/details/86529523
启用并测试USART3
ln -s /bin/btools /bin/himm
himm 0x114F0000 0x532 #RX
himm 0x114F0004 0x432 #TX
mknod /dev/ttyAMA3 c 204 67
cat /dev/ttyAMA3 &
echo -e "AT+GSN\r\n" >/dev/ttyAMA3
默认波特率为 9600 8N1
如何添加串口1与串口2支持?
vi arch/arm/boot/dts/hi3516dv300.dtsi
aliases {
serial0 = &uart0;
// serial1 = &uart1;
// serial2 = &uart2;
serial3 = &uart3; // 这句话决定在/dev/下生成对文件是 ttyAMA3 还是ttyAMA1
}
只需在vi arch/arm/boot/dts/hi3516dv300-demb.dts
中按照
&uart0 {
status = "okay";
};
&uart1 {
status = "okay";
};
&uart2 {
status = "okay";
};
&uart3 {
status = "okay";
};
之后重新编译内核,make uImage
解决UART3不可用的问题,由时钟问题
echo "aaaa" >ttyAMA3
------------[ cut here ]------------
WARNING: CPU: 0 PID: 164 at drivers/tty/serial/serial_core.c:440 uart_get_baud_rate+0xec/0x14c
Modules linked in: hi_mipi_rx(O) hi3516cv500_acodec(PO) hi3516cv500_adec(PO) hi3516cv500_aenc(PO) hi3516cv500_ao(PO) hi3516cv500_ai(PO) hi3516cv500_aio(PO) hi3516cv500_hdmi(PO) hi_sensor_spi(O) hi_sensor)
CPU: 0 PID: 164 Comm: sh Tainted: P W O 4.9.37 #
解决方法: 另外hi3516dv300的uart3有个bug,缺少对UART3时钟的配置 kernel/linux-4.9.y/vi drivers/clk/hisilicon/clk-hi3516dv300.c
文件中
static struct hisi_gate_clock hi3516dv300_gate_clks[] 在132行 添加一项:
{ HI3516DV300_UART3_CLK, "clk_uart3", "uart_mux3",CLK_SET_RATE_PARENT, 0x1b8, 3, 0, },
如下所示
static struct hisi_gate_clock hi3516dv300_gate_clks[] __initdata = {
/* fmc */
{ HI3516DV300_FMC_CLK, "clk_fmc", "fmc_mux",
CLK_SET_RATE_PARENT, 0x144, 1, 0, },
/* mmc */
{ HI3516DV300_MMC0_CLK, "clk_mmc0", "mmc0_mux",
CLK_SET_RATE_PARENT, 0x148, 1, 0, },
{ HI3516DV300_MMC1_CLK, "clk_mmc1", "mmc1_mux",
CLK_SET_RATE_PARENT, 0x160, 1, 0, },
{ HI3516DV300_MMC2_CLK, "clk_mmc2", "mmc2_mux",
CLK_SET_RATE_PARENT, 0x154, 1, 0, },
/* uart */
{ HI3516DV300_UART0_CLK, "clk_uart0", "uart_mux0",
CLK_SET_RATE_PARENT, 0x1b8, 0, 0, },
{ HI3516DV300_UART1_CLK, "clk_uart1", "uart_mux1",
CLK_SET_RATE_PARENT, 0x1b8, 1, 0, },
{ HI3516DV300_UART2_CLK, "clk_uart2", "uart_mux2",
CLK_SET_RATE_PARENT, 0x1b8, 2, 0, },
// 132行增加uart3的配置
{ HI3516DV300_UART3_CLK, "clk_uart3", "uart_mux3",
CLK_SET_RATE_PARENT, 0x1b8, 3, 0, },
{ HI3516DV300_UART4_CLK, "clk_uart4", "uart_mux4",
CLK_SET_RATE_PARENT, 0x1b8, 4, 0, },
/* i2c*/
{ HI3516DV300_I2C0_CLK, "clk_i2c0", "50m",
CLK_SET_RATE_PARENT, 0x1b8, 11, 0, },
{ HI3516DV300_I2C1_CLK, "clk_i2c1", "50m",
CLK_SET_RATE_PARENT, 0x1b8, 12, 0, },
下载调试并启动内核
setenv serverip 192.168.100.100;setenv ipaddr 192.168.100.10;mw.b 0x82000000 0xFF 0x300000;tftp 0x82000000 hi3516dv300-imx335/uImage;bootm 0x82000000内核会自动创建 /dev/ttyAMA3 设备文件,如果没有创建则手动创建
mknod /dev/ttyAMA1 c 204 65
mknod /dev/ttyAMA2 c 204 66
mknod /dev/ttyAMA3 c 204 67配置UART3寄存器GPIO管脚为UART模式
利用himm 工具 复用为uart就可以进行操作了,
//RX //TX
himm 0x114F0000 0x532
himm 0x114F0004 0x432
- 测试串口,波特率默认为9600
cat /dev/ttyAMA3
在启动脚本/etc/init.d/S00devs中修改
#!/bin/sh
mknod /dev/console c 5 1
mknod /dev/ttyAMA0 c 204 64
mknod /dev/ttyAMA1 c 204 65
+mknod /dev/ttyAMA2 c 204 66
+mknod /dev/ttyAMA3 c 204 67
///这里一定需要改,因为你是要串口3作为调试串口,而
添加串口的基地址,具体的地址可以在海思的文档中找到
进行过以上操作之后 内核中可以开启UART2了
不过在使用之前还需要开启端口复用,在ko文件中找到load3536 所启动的pinmux.sh/pinmux_socket_master.sh/
uart 1
himm 0x120F0134 0x01
himm 0x120F0138 0x01
himm 0x120F013C 0x01
URT2:
himm 0x120F0140 0x01
himm 0x120F0144 0x01
#UART3
开启 uart3
iocfg_reg19 V10 Pin HDMI_CEC IO Config Register.
0x114F_0004
31:11 保留。
10 电平转换速率控制,为0时电平转换速率快,为1时电平转换速率慢。
9 下拉电阻使能,高有效。
8 上拉电阻使能,高有效。
7:4 驱动能力,0~3对应IO驱动能力IO3_档位1~档位4。
3:0 "功能选择:
0:GPIO2_5
1:HDMI_CEC
2:UART3_TXD"
himm 0x114F0000 0x532 //RX
himm 0x114F0004 0x432 //TX