[Linux驱动炼成记] 09-串口调试

实现功能

主控(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 {
		serial0 = &uart_AO;
		serial1 = &uart_A;
		serial2 = &uart_AO_B;
		serial3 = &uart_B;
	};

	uart_AO_B: serial@4000 {
		compatible = "amlogic, meson-uart";
		reg = <0x0 0x4000 0x0 0x18>;
		interrupts = <0 197 1>;
		status = "okay";
		clocks = <&xtal>;
		clock-names = "clk_uart";
		fifosize = < 64 >;
		pinctrl-names = "default";
		pinctrl-0 = <&ao_b_uart_pins>;
	};
  //串口正常加载之后,会显示 
 ls /dev/ttyS0
ttyS0  ttyS1  ttyS2  ttyS3
MCU进行通信
  1. 首先调用A方提供的动态库, 通过 file *so 发现是MIPS格式,而A113X需要的是
file xxx.so 
xxx.so: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, BuildID[sha1]=2a8193fca2caa7fcb9f62120f8bd34152a38ee9b, not stripped
  1. 写了一个小的测试程序,验证的动态库,如下 :
arm-linux-xxx/g++ -W -Wall -O2 -g -std=c++11 -Wl,-rpat=.-o xxx xxx.cpp -L . -lxxxx -lpthread 

A方提供的MCU程序使用C++ 11实现,这点还是值得学习的
  1. 调试 发现LED没有反应,这个时候只能单独测试, 通过PC的串口验证,也不行,只能排查硬件.

意外发现MCU和主控的 RX / TX接反了, 修改后正常.

经验说明项目的手板什么低级的硬件错误都可以犯, 还是要静下心来分析问题,解决问题 这次的坑:

  1. 功放IIC通讯不成功, 功放IIC SDA SCL 短路导致
  2. 串口和外设通讯不成功, RX/TX接反

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券