Hi3531A芯片共有四個uart單元,uart0是調試串口默認是打開的,uart1-3需要重新配置。操作如下。
“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設備
在“……\osdrv\opensource\kernel\linux-3.10.y\arch\arm\mach-hi3531a\core.c”中,添加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中
參考“海思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相關配置,但未做修改。
第1至3步需要從新編譯內核並燒寫到Hi3531A設備裏,如果沒有什麼異常,在嵌入式設備上的/dev/目錄下發現新的3個設備文件ttyAMA1-3。
串口驅動沒有在驅動中建立設備文件,因此在文件系統的啓動腳本手動建立。在/etc/init.d/S00devs裏:mknod /dev/ttyAMA* c 204 *;
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,如下
參考“海思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放到設備裏執行後,會顯示,
所以在arm-linux編譯環境裏編譯時添加-static,
arm-hisiv400-linux-gcc -g hiserial.c -o myhicom -static。
下載sscom32串口調試工具到PC機,打開sscom32,設置波特率等。
打開設備telnet,設備啓動後,使能uart1-3的管腳複用寄存器,
可以用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讀取數據。
“sp3232中文_百度文庫 https://wenku.baidu.com/view/4d849817866fb84ae45c8df4.html
常用元器件使用方法5:RS-232電平轉換芯片SP3232EEN的使用方法 - snmplink的博客 - CSDN博客 https://blog.csdn.net/qingwufeiyang12346/article/details/82390626”
SP3232EEN芯片是TTL和RS232轉換芯片,TTL屬於嵌入式設備端,RS232接pc端。
使用的文檔和代碼在:Hi3531A添加串口uart1、uart2、uart3