1. Uart介紹
1.1 串口資源介紹
EASY EAI Orin-Nano開(kāi)發(fā)板的串口資源被劃分為兩類。一類是已被特定功能所占用的【不可用串口】,另外一個(gè)類可由用戶自由使用的【可用串口】。
【不可直接使用的串口】分布情況如下所示。
串口號(hào) | 設(shè)備節(jié)點(diǎn) | 描述 |
串口0 | /dev/ttyFIQ0 | 調(diào)試串口占用,不作為普通串口使用 |
串口1~3 | 無(wú) | 串口所關(guān)聯(lián)的引腳,已被復(fù)用成其他功能 |
串口5~7 | 無(wú) | 串口所關(guān)聯(lián)的引腳,已被復(fù)用成其他功能 |
串口9 | 無(wú) | 串口所關(guān)聯(lián)的引腳,已被復(fù)用成其他功能 |
串口11 | 無(wú) | 串口所關(guān)聯(lián)的引腳,已被復(fù)用成其他功能 |
硬件分布情況如下所示。
【可用串口】分布情況如下所示。
串口號(hào) | 設(shè)備節(jié)點(diǎn) | 描述 |
串口4 | /dev/ttyS4 | TTL電平。 |
串口8 | /dev/ttyS8 | TTL電平。 |
串口10 | /dev/ttyS10 | TTL電平。 |
硬件分布情況如下所示。
1.2 硬件接線
常規(guī)接線,設(shè)備與設(shè)備進(jìn)行通信:
本單例測(cè)試接線,利用跳線帽把Rxd引腳與Txd引腳短接,進(jìn)行自發(fā)自收。
2. 快速上手
2.1 例程源碼下載
到【百度網(wǎng)盤(pán)】上下載相關(guān)的單例程序:
鏈接:https://pan.baidu.com/s/1RXHMGpmGSEfFy0rb1VkXSg?pwd=1234
提取碼: 1234
比如在windows環(huán)境中,就把單例程序下載到:此電腦D:BaiduNetdisk (無(wú)規(guī)定,用戶可自主選擇),如下圖所示。
然后把例程【復(fù)制粘貼】到nfs掛載目錄中。(不清楚目錄如何構(gòu)建的,可以參考《入門(mén)指南/開(kāi)發(fā)環(huán)境準(zhǔn)備/nfs服務(wù)搭建與掛載》)
2.2 例程編譯&運(yùn)行
通過(guò)adb shell進(jìn)入開(kāi)發(fā)板環(huán)境(不清楚如何通過(guò)adb進(jìn)行調(diào)試,可以參考《入門(mén)指南/開(kāi)發(fā)板調(diào)試方式介紹/adb調(diào)試》),執(zhí)行下方命令定位到demo目錄,并且執(zhí)行編譯操作。
cd /home/orin-nano/Desktop/nfs/06_Uart/ ./build.sh

編譯成功后,相關(guān)的demo會(huì)生成2個(gè)可執(zhí)行程序在Release目錄下。它們分別是發(fā)送端demo:test-Send,接收端demo:test-Recv。
先執(zhí)行下方命令以運(yùn)行接收端demo,如下所示。
sudo ./Release/test-Recv /dev/ttyS10
執(zhí)行效果如下所示,此時(shí)接收端會(huì)等待發(fā)送端發(fā)來(lái)數(shù)據(jù)。
再用【Ctrl+Shift+T】打開(kāi)新終端,然后進(jìn)入adbshell,定位到demo目錄,如何所示:
最后執(zhí)行下方命令以運(yùn)行發(fā)送端demo,如下所示。
sudo ./Release/test-Send /dev/ttyS10

此時(shí)切換回來(lái)剛才的終端,就會(huì)發(fā)現(xiàn)接收端demo已經(jīng)收到了發(fā)送端demo發(fā)過(guò)來(lái)的數(shù)據(jù)了。
3. C語(yǔ)言使用案例
串口的C語(yǔ)言使用案例,接收端代碼地址為06_UART/test-uart/Recv.c,供用戶編碼參考。以下代碼展示了對(duì)串口接收端操作流程:
int main(int argc, char **argv) { if(2 != argc){ printf("Usage:n"); printf(" sudo %s %sn", argv[0], "/dev/ttyS4/8/10?>"); return -1; } int fd = UART_Open(argv[1]); if(fd < 0){ printf("33[33m【Open ERROR!】%sn", DEBUG_COLOR_TAIL); return -1; } if(false == UART_Set(fd, 115200, 0, 8, 1, 'N')){ printf("33[33m【Init ERROR!】%sn", DEBUG_COLOR_TAIL); return -1; } const char *strReceiver = "I am uart Receiver"; printf("33[36m【Init OK "%s"】%sn", strReceiver, DEBUG_COLOR_TAIL); char recvBuf[128]={0}; while(1){ if(UART_Recv(fd, recvBuf, sizeof(recvBuf)) <= 0){ continue; }else{ printf("33[36m【Recv Msg from Sender】:%s", DEBUG_COLOR_TAIL); printf(" %sn", recvBuf); break; } } UART_Close(fd); printf("33[42m【Recv date OK. BYE BYE!】%sn", DEBUG_COLOR_TAIL); return 0; }
發(fā)送端代碼地址為06_UART/test-uart/Send.c,供用戶編碼參考。以下代碼展示了對(duì)串口發(fā)送端操作流程:
int main(int argc, char **argv) { if(2 != argc){ printf("Usage:n"); printf(" sudo %s %sn", argv[0], "/dev/ttyACM4/8/10?>"); return -1; } int fd = UART_Open(argv[1]); if(fd < 0){ printf("33[33m【Open ERROR!】%sn", DEBUG_COLOR_TAIL); return -1; } if(false == UART_Set(fd, 115200, 0, 8, 1, 'N')){ printf("33[33m【Init ERROR!】%sn", DEBUG_COLOR_TAIL); return -1; } char *strSender = "I am uart Sender"; printf("33[36m【Init OK "%s"】%sn", strSender, DEBUG_COLOR_TAIL); int len = UART_Send(fd, strSender, strlen(strSender)); if(len <= 0){ printf("33[41m【Send data ERROR!】%sn", DEBUG_COLOR_TAIL); return -1; } UART_Close(fd); printf("33[42m【Send date OK. BYE BYE!】%sn", DEBUG_COLOR_TAIL); return 0; }
其中UART_Open(),UART_Set(),UART_Send(),UART_Recv()是對(duì)系統(tǒng)調(diào)用的易用化封裝。具體實(shí)現(xiàn)于06_UART/commonApi/uart.c
審核編輯 黃宇
-
uart
+關(guān)注
關(guān)注
22文章
1275瀏覽量
103726 -
開(kāi)發(fā)板
+關(guān)注
關(guān)注
25文章
5647瀏覽量
104010 -
rk3576
+關(guān)注
關(guān)注
1文章
166瀏覽量
674
發(fā)布評(píng)論請(qǐng)先 登錄
米爾RK3576開(kāi)發(fā)板特惠活動(dòng)!

基于RK3576開(kāi)發(fā)板的MIPI-DSI使用

評(píng)論