海思Hi3531A芯片设备添加测试UART1-3

Hi3531A芯片共有四个uart单元,uart0是调试串口默认是打开的,uart1-3需要重新配置。操作如下。

 

1.确定内核加载了串口uart驱动程序

    可以参考

    “hi3531 添加uart3 https://blog.csdn.net/xiaoaid01/article/details/51328667”

海思Hi3531A的linux内核中串口驱动和设备是挂在AMBA总线下的,其驱动程序文件为“……\osdrv\opensource\kernel\linux-3.10.y\drivers\tty\serial\amba-pl011.c,在linux内核配置中默认是使能该驱动的,必须使能该驱动才能使用串口tty设备

 

2.添加amba总线上的串口设备                 

    在“……\osdrv\opensource\kernel\linux-3.10.y\arch\arm\mach-hi3531a\core.c中,添加uart1-3的amba总线设备数据结构体。

海思Hi3531A芯片设备添加测试UART1-3_第1张图片

    固定uart1-3时钟频率。

海思Hi3531A芯片设备添加测试UART1-3_第2张图片

    可以看下宏定义:amba设备数据结构体

海思Hi3531A芯片设备添加测试UART1-3_第3张图片

海思Hi3531A芯片设备添加测试UART1-3_第4张图片

    例如HIL_AMBA_DEVICE(uart1, "uart:1", UART1, NULL)赋值后,其中的.irq={INTNR_UART1,INTNR_UART1}

    INTNR_UART1的定义,在……\osdrv\opensource\kernel\linux-3.10.y\arch\arm\mach-hi3531a\include\mach\irqs.h

海思Hi3531A芯片设备添加测试UART1-3_第5张图片

3.设备树文件

参考“海思HI35xx平台串口配置方法 - dosthing的博客 - CSDN博客  https://blog.csdn.net/dosthing/article/details/82951207配置内核,以实现UART单元映射为linux下的设备文件,这里主要涉及就是海思的设备树更改,相对简单。进入SDK目录\osdrv\opensource\kernel\linux-3.18.y\arch\arm\boot\dts,找到以下设备树文件。”               

在“……\osdrv\opensource\kernel\linux-3.10.y\arch\arm\boot\dts”中,未找到hi3531a.dtsi和hi3531a-demb.dts。搜到里面类似内容,找到uart0-3相关配置,但未做修改。

 

4.确认tty文件

    第1至3步需要从新编译内核并烧写到Hi3531A设备里,如果没有什么异常,在嵌入式设备上的/dev/目录下发现新的3个设备文件ttyAMA1-3。

    串口驱动没有在驱动中建立设备文件,因此在文件系统的启动脚本手动建立。在/etc/init.d/S00devs里:mknod /dev/ttyAMA* c 204 *

并且需要确保这些操作在设备启动时执行成功。

海思Hi3531A芯片设备添加测试UART1-3_第6张图片

启动时串口uart0打印如下,说明启动S00devs成功。

海思Hi3531A芯片设备添加测试UART1-3_第7张图片

5.配置管脚

    参考“海思HI35xx平台串口配置方法 - dosthing的博客 - CSDN博客  https://blog.csdn.net/dosthing/article/details/82951207和“【已解决】3516A UART1 / RS485 只能发送,不能接收  http://bbs.ebaina.com/thread-13585-1-1.html

    对比设备硬件电路图。查看uart1-3,管脚复用寄存器,及其各值所代表的管脚功能。

Register Name

Function

Address

Default Value

Description

muxctrl_reg126

UART0_RXD管脚复用寄存器。

0x120F01F8

0

UART0_RXD管脚复用关系选择:

0 : UART0_RXD

1 : VOU_SLV_DAT5

2 : GPIO18_0

3 : reserved

其它:reserved

muxctrl_reg127

UART0_TXD管脚复用寄存器。

0x120F01FC

0

UART0_TXD管脚复用关系选择:

0 : UART0_TXD

1 : VOU_SLV_DAT4

2 : GPIO18_1

3 : reserved

其它:reserved

muxctrl_reg128

UART1_RTSN管脚复用寄存器。

0x120F0200

0

UART1_RTSN管脚复用关系选择:

0 : GPIO18_2

1 : VOU_SLV_DAT11

2 : UART1_RTSN

3 : UART0_RTSN

其它:reserved

muxctrl_reg129

UART1_CTSN管脚复用寄存器。

0x120F0204

0

UART1_CTSN管脚复用关系选择:

0 : GPIO18_3

1 : VOU_SLV_DAT10

2 : UART1_CTSN

3 : UART0_CTSN

其它:reserved

muxctrl_reg130

UART1_RXD管脚复用寄存器。

0x120F0208

0

UART1_RXD管脚复用关系选择:

0 : GPIO18_4

1 : VOU_SLV_DAT7

2 : UART1_RXD

3 : reserved

其它:reserved

muxctrl_reg131

UART1_TXD管脚复用寄存器。

0x120F020C

0

UART1_TXD管脚复用关系选择:

0 : GPIO18_5

1 : VOU_SLV_DAT6

2 : UART1_TXD

3 : reserved

其它:reserved

muxctrl_reg132

UART2_RXD管脚复用寄存器。

0x120F0210

0

UART2_RXD管脚复用关系选择:

0 : GPIO18_6

1 : VOU_SLV_DAT12

2 : UART2_RXD

3 : UART0_RTSN

其它:reserved

muxctrl_reg133

UART2_TXD管脚复用寄存器。

0x120F0214

0

UART2_TXD管脚复用关系选择:

0 : GPIO18_7

1 : VOU_SLV_DAT13

2 : UART2_TXD

3 : UART0_CTSN

其它:reserved

muxctrl_reg134

UART3_RXD管脚复用寄存器。

0x120F0218

0

UART3_RXD管脚复用关系选择:

0 : GPIO23_6

1 : UART3_RXD

2 : reserved

3 : reserved

其它:reserved

muxctrl_reg135

UART3_TXD管脚复用寄存器。

0x120F021C

0

UART3_TXD管脚复用关系选择:

0 : GPIO23_7

1 : UART3_TXD

2 : reserved

3 : reserved

其它:reserved

    使用himm(也可使用writew在内核程序中对寄存器进行操作) 使能对应的UART*_RXD和UART*_TXD寄存器,例如:

himm 0x120F0208 0x2   #使能UART1的读功能#UART1_RXD管脚寄存器复用为UART1_RXD

对uart1-3的对应管脚寄存器操作写成脚本uart-regconfig.sh,如下

海思Hi3531A芯片设备添加测试UART1-3_第8张图片

 

6.编写对串口进行操作的程序

    参考“海思HI35xx平台串口配置方法 - dosthing的博客 - CSDN博客  https://blog.csdn.net/dosthing/article/details/82951207,与其他的linux设备操作类似,通过open、fcntl、close来实现与UART单元进行操作。在串口设备中,比较特殊的就是串口的波特率、奇偶校验、数据位以及停止位的设置了,只有将它们正确设置了才能进行串口通讯。

    查看文件夹中Makefile,主要命令是:arm-hisiv400-linux-gcc -g hiserial.c -o myhicom,由于这样生成的myhicom放到设备里执行后,会显示,

-sh: ./myhicom: not found

所以在arm-linux编译环境里编译时添加-static,

arm-hisiv400-linux-gcc -g hiserial.c -o myhicom -static

 

7.测试

下载sscom32串口调试工具到PC机,打开sscom32,设置波特率等。

    打开设备telnet,设备启动后,使能uart1-3的管脚复用寄存器,

海思Hi3531A芯片设备添加测试UART1-3_第9张图片

执行./myhicom 向PC发送信息:

海思Hi3531A芯片设备添加测试UART1-3_第10张图片

    可以用stty看一下当前串口的配置信息,stty  -a -F /dev/ttyAMA1   查看终端输出的信息;

    “cat /proc/tty/driver/ttyAMA” 看TX/RX的变化。

海思Hi3531A芯片设备添加测试UART1-3_第11张图片

    如果cat /proc/tty/driver/ttyAMA显示发送的数据字符数正确,但sscom32没收到数据,可能硬件错误。

    使用sscom32向设备uart1发送数据,使用./myhicom -d /dev/ttyAMA1 -s 115200 -r读取数据。

海思Hi3531A芯片设备添加测试UART1-3_第12张图片

    如果读不到数据,说明硬件问题。

8.注意     

这里注意SP3232EEN芯片的使用,参考

sp3232中文_百度文库  https://wenku.baidu.com/view/4d849817866fb84ae45c8df4.html

 常用元器件使用方法5RS-232电平转换芯片SP3232EEN的使用方法 - snmplink的博客 - CSDN博客  https://blog.csdn.net/qingwufeiyang12346/article/details/82390626

海思Hi3531A芯片设备添加测试UART1-3_第13张图片

SP3232EEN芯片是TTL和RS232转换芯片,TTL属于嵌入式设备端,RS232接pc端。

使用的文档和代码在:Hi3531A添加串口uart1、uart2、uart3

你可能感兴趣的:(uart,海思,Hi3531A,串口,uart1,uart3)