Firefly开源社区

打印 上一主题 下一主题

[Linux] [问题咨询]RK3308 UART TX正常,但RX异常(应用层不能接收到数据)

10

积分

0

威望

0

贡献

技术小白

积分
10

[问题咨询]RK3308 UART TX正常,但RX异常(应用层不能接收到数据)

发表于 2022-3-24 22:32:25      浏览:5042 | 回复:1        打印      只看该作者   [复制链接] 楼主
  • 固件类型: 自行编译的固件
  • SDK包名称: Firefly-RK3308_Linux_SDK_git_20190924
  • SDK更新到哪个COMMIT: 2021-12-17 22:03:00
  • SDK修改内容: diff --git a/kernel/arch/arm64/boot/dts/rockchip/rk3308b-roc-cc-plus-amic_emmc.dts b/kernel/arch/arm64/boot/dts/rockchip/rk3308b-roc-cc-plus-amic_emmc.dts index d97f0c9..3138ae7 100644 --- a/kernel/arch/arm64/boot/dts/rockchip/rk3308b-roc-cc-plus-amic_emmc.dts +++ b/kernel/arch/arm64/boot/dts/rockchip/rk3308b-roc-cc-plus-amic_emmc.dts @@ -162,12 +162,24 @@ rockchip,serial-id = <4>; }; +&uart1 { + status = "okay"; +}; + &uart4 { status = "disabled"; }; +&i2c0 { + status = "disabled"; +}; + +&spi2 { + status = "disabled"; +}; + &sdmmc { - status = "okay"; + status = "disabled"; };
  • Log日志: UART接收不到数据.log
问题描述及复现步骤:
【问题描述】
按照上面的dts修改,使能uart1(默认RX——GPIO1_D0,TX——GPIO1_D1),测试uart1能正确TX,但RX不到数据。

【测试拓扑】
开发板uart1------杜邦线------USB转串口板--PC

【测试方案】
方案1:
1)echo "abcd" > /dev/ttyS1,PC sscom能收到数据。
2)cat /dev/ttyS1,PC sscom发送数据,但开发板调试串口没有收到数据。
方案2:
编写应用层测试程序,open ttyS1,write后,PC sscom能接收到数据;但PC发送数据,程序不能read到数据。

【问题分析】
1、PC发送数据后,在PC sscom能收到发出去的一部分数据。可能是开发板串口驱动做了RX后的回显处理?
2、读取GPIO1D_IOMUX(io -4 -r 0xFF000038),值是0x0000005,故能确认是IO复用是正确配置了UART1的TX和RX的。

【备注】
测试了uart0、uart2、uart3,存在相同问题。

【问题咨询】
1、请问应该要如何跟进本问题?
2、计划跟进驱动代码,请问驱动最早RX到数据的是哪部分代码?
主要是要跟进“kernel/drivers/tty/serial/8250”的串口驱动代码?
3、怀疑是UART RX做了回显处理的话,是否有哪些寄存器可以进行确认?

UART接收不到数据.log

39.02 KB, 下载次数: 1, 下载积分: 灯泡 -1 , 经验 -1

回复

使用道具 举报

10

积分

0

威望

0

贡献

技术小白

积分
10
发表于 2022-3-25 17:48:31        只看该作者  沙发
本帖最后由 谷月轩 于 2022-3-25 17:50 编辑

确认是默认tty配置导致的问题。可能和默认使用ttyFIQ0来进行打印相关。
应用层临时按照如下修改,可正常TX和RX,串口相关配置详细说明待补充。
    struct termios options;
    ret = tcgetattr(fd, &options);

    options.c_cflag = 0x18b3;
    options.c_lflag = 0;
    options.c_iflag = 0;
    options.c_oflag = 0;
    cfsetispeed(&options, B9600); /* 输入波特率 */
    cfsetospeed(&options, B9600); /* 输出波特率 */

    ret = tcsetattr(fd, TCSANOW, &options);

关于回显的问题,确认驱动中初始化tty时,n_tty_set_termios()有L_ECHO(tty)的属性,导致的回显。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表