Linux驅動煉成記 09 串列埠除錯

2021-08-29 12:30:13 字數 1105 閱讀 6146

實現功能

主控(amlogic a113x)串列埠和mcu(stm32) 進行串列埠通訊,實現資料的傳輸,由stm32控制燈效.看似簡單的乙個雙方對接功能,還是走了不少彎路的.

串列埠dts配置

//amlogic a113x引腳編號

gpioz_8 -> i2c_sck_b/uart_tx_ao_b

gpioz_9 -> i2c_sda_b/uart_rx_ao_b

根據引腳功能中uart_rx_ao_b和dts中的serial2 = &uart_ao_b對應

aliases ;

uart_ao_b: serial@4000 ;

//串列埠正常載入之後,會顯示

ls /dev/ttys0

ttys0 ttys1 ttys2 ttys3

mcu進行通訊

首先呼叫a方提供的動態庫, 通過file *so發現是mips格式,而a113x需要的是

file ***.so 

***.so: elf 32-bit lsb shared object, arm, eabi5 version 1 (sysv), dynamically linked, buildid[sha1]=2a8193fca2caa7fcb9f62120f8bd34152a38ee9b, not stripped

寫了乙個小的測試程式,驗證的動態庫,如下 :

arm-linux-***/g++ -w -wall -o2 -g -std=c++11 -wl,-rpat=.-o *** ***.cpp -l . -l***x -lpthread 

a方提供的mcu程式使用c++ 11實現,這點還是值得學習的

除錯

發現led沒有反應,這個時候只能單獨測試, 通過pc的串列埠驗證,也不行,只能排查硬體.

意外發現mcu和主控的 rx / tx接反了, 修改後正常.

經驗說明專案的手板什麼低階的硬體錯誤都可以犯, 還是要靜下心來分析問題,解決問題

這次的坑:

功放iic通訊不成功, 功放iic sda scl 短路導致

串列埠和外設通訊不成功, rx/tx接反

4 串列埠驅動

1 初始化gpio的模式和速度 2 配置中斷優先順序分組 3 串列埠初始化 4 串列埠服務函式編寫 我是分割線 一 gpio初始化 gpio埠設定 gpio inittypedef gpio initstructure rcc apb2periphclockcmd rcc apb2periph gp...

Linux串列埠驅動程式 6 串列埠驅動實現

在linux驅動開發中,一般都不會從0開始寫,我們做的更多的是移植和修改,有時候還需要對驅動程式進行優化。當然具備移植 修改驅動能力的基礎是能夠讀懂驅動程式,同時需要對這個驅動程式的核心功能非常了解。接下來開始編寫傳送中斷處理程式和接收中斷處理程式的 1.傳送中斷處理程式的設計 傳送中斷處理程式 s...

國嵌攻略 132 串列埠驅動實現

如何開發linux驅動程式 一般情況下都會有現成的驅動程式,不需要從零開始開發驅動程式。所以linux驅動開發主要分為兩個步驟 1.讀得懂驅動程式 2.寫的了核心功能。傳送中斷處理程式 傳送中斷處理函式在 drivers serial samsung.c的s3c24xx serial tx char...