海思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總線設備數據結構體。

    固定uart1-3時鐘頻率。

    可以看下宏定義:amba設備數據結構體

    例如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

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 *

並且需要確保這些操作在設備啓動時執行成功。

啓動時串口uart0打印如下,說明啓動S00devs成功。

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,如下

 

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的管腳複用寄存器,

執行./myhicom 向PC發送信息:

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

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

    如果cat /proc/tty/driver/ttyAMA顯示發送的數據字符數正確,但sscom32沒收到數據,可能硬件錯誤。

    使用sscom32向設備uart1發送數據,使用./myhicom -d /dev/ttyAMA1 -s 115200 -r讀取數據。

    如果讀不到數據,說明硬件問題。

8.注意     

這裏注意SP3232EEN芯片的使用,參考

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

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

SP3232EEN芯片是TTL和RS232轉換芯片,TTL屬於嵌入式設備端,RS232接pc端。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章