amxx 发表于 2020-3-4 15:51:16

新塘nuc972 uart2 RS485自动方向控制的BUG及解决方法

新塘nuc972 uart2 RS485自动方向控制的BUG及解决方法
先说结论:
Nuc970 UART2 485自动方向控制功能在nuc970bsp-release-20160511包中无法使用
将linux/drivers/tty/serial/nuc970-serial.c文件中的
#elif defined (CONFIG_NUC970_UART2_PF_FC) 修改为
#elif defined (CONFIG_NUC970_UART2_ FC _PF)即可
不清楚新塘后面的bsp包有没有修正该功能,在此提醒各位。

感谢redworlf007和wangwenxue,经常看你们的关于新塘 nuc972 Linux的帖子,收获颇丰,继续向你们学习。
以下是过程,大神请略过。
1、Nuc972串口支持RS485自动方向控制功能,该功能在串口发送的时候自动控制RTS的方向引脚,通过在linux的串口配置中,可以选择相应的引脚模式。

2、该模式的选择会在menuconfig退出的时候,生产autoconfig.h文件,该文件在includegeneratedautoconf.h中会配置相应的预定义条件。

3、在nuc970-serial.c文件nuc970serial_pinctrl函数中,会读取该预定义用于对串口引脚的初始化
需要将#elif defined (CONFIG_NUC970_UART2_PF_FC) 修改为#elif defined (CONFIG_NUC970_UART2_ FC _PF)

根据不同的配置选择初始化不同的引脚,该函数会调用drviers/pinctrl/pinctrl-nuc970.c中的nuc970_enable函数
在该函数中,根据传入的引脚功能组配置不同的引脚功能,直接修改寄存器配置具体过程如下
3.1、nuc970_pinctrl_probe函数向平台注册了nuc970_pinmap数组结构,且注册了设备描述结构体。


3.2、在nuc970_pinmap结构中有对于具体功能的描述

注意这里的.name就是serical-nuc970.c文件中的传递参数值
3.3、在nuc970_pinmap结构体中描述了组成uart2_fc功能的引脚组由2个uart2_0_grp和uart2_1_grp,并通过nuc970_pinctrl_groups数组

3.4、查看nuc972数据手册,寄存器设置相关部分

3.5、该结构体中.pins最后根据相应的数组,查找到了具体的某一个引脚

changhui0222 发表于 2020-3-4 16:00:29

已阅 紫薯布丁

kyq_linux 发表于 2020-3-4 22:08:53

留个脚印!!
页: [1]
查看完整版本: 新塘nuc972 uart2 RS485自动方向控制的BUG及解决方法