当前位置:   article > 正文

nxp imx6ull笔记_nxp imx6ull gpio

nxp imx6ull gpio


第一 memtool工具的使用

1.工具的目录

/unit_tests/memtool

2.常用于修改寄存器,比如PIN脚的配置

root@imx6ull14x14evk:~# ./unit_tests/memtool IOMUXC.SW_PAD_CTL_PAD_UART4_RX_DATA.
SOC: i.MX6ULL
IOMUXC   Addr:0x20e0000 
  IOMUXC.SW_PAD_CTL_PAD_UART4_RX_DATA Addr:0x020E0344 Value:0x0000B0B1 - SW_PAD_CTL Register
     IOMUXC.SW_PAD_CTL_PAD_UART4_RX_DATA.SRE(0..0)      :0x1
             Select one out of next values for pad: UART4_RX_DATA
     IOMUXC.SW_PAD_CTL_PAD_UART4_RX_DATA.DSE(3..5)      :0x6
             Select one out of next values for pad: UART4_RX_DATA
     IOMUXC.SW_PAD_CTL_PAD_UART4_RX_DATA.SPEED(6..7)    :0x2
             Select one out of next values for pad: UART4_RX_DATA
     IOMUXC.SW_PAD_CTL_PAD_UART4_RX_DATA.ODE(11..11)    :0x0
             Select one out of next values for pad: UART4_RX_DATA
     IOMUXC.SW_PAD_CTL_PAD_UART4_RX_DATA.PKE(12..12)    :0x1
             Select one out of next values for pad: UART4_RX_DATA
     IOMUXC.SW_PAD_CTL_PAD_UART4_RX_DATA.PUE(13..13)    :0x1
             Select one out of next values for pad: UART4_RX_DATA
     IOMUXC.SW_PAD_CTL_PAD_UART4_RX_DATA.PUS(14..15)    :0x2
             Select one out of next values for pad: UART4_RX_DATA
     IOMUXC.SW_PAD_CTL_PAD_UART4_RX_DATA.HYS(16..16)    :0x0
             Select one out of next values for pad: UART4_RX_DATA
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

3. 对应数据手册的章节

32.6.176 SW_PAD_CTL_PAD_UART4_RX_DATA SW PAD
Control Register
(IOMUXC_SW_PAD_CTL_PAD_UART4_RX_DATA)
SW_PAD_CTL Register
Address: 20E_0000h base + 344h offset = 20E_0344h
  • 1
  • 2
  • 3
  • 4
  • 5

4.对于GPIO来说,其内部网络可参考

28.4.2 GPIO pad structure
在这里插入图片描述

第二 调试问题:485收发切换延时问题

  • 我们的解决办法:
    加一条tcdrain(fd);
// 初始化串口  
fd = open("/dev/ttyS1", O_RDWR | O_NOCTTY);
init_serial(fd, 9600, 8, 1, 'N');
set_485_dir(LOW);	// 默认为接收状态  

// 发送数据
set_485_dir(HIGH);
write(fd, buf, sizeof(buf));
tcdrain(fd);    	// 此句判断时刻不准,延时约10-20ms  
set_485_dir(LOW);

// 接收数据  
read();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

后来,经过客户问题反馈,这样处理还是会出问题.
拓扑图:
云服务器
|
|
|
M2M <--------485-------------> 客户设备

测试流程:
1.server发现M2M连接
2.server发送M2M 1字节的命令
3.m1通过485转发到客户终端
4,终端回应31字节的数据
5.通过m2m透传到server
6.server发送1字节的命令
7.通过m2m透传到客户终端后,终端会回应1029字节的数据
8.此时通过M2m的收发脚切换,还没到受模式,客户端就已经开始传输数据,会导致前面一些数据丢失

在这里插入图片描述

发送一字节的

第三 UART接收到杂波识别为数据

在IMX6ULL平台,串口遇到接收数据异常的情况,具体描述如下. 问题描述:
外部连接到IMX6ULL串口的设备,外部设备在休眠的时候会发出一个杂波,经示波器抓取,此波形为一个低电平.约为40~50us.
通信使用的波特率为9600bps , 8N1.在IMX6ull应用端读串口数据,将会一直接收到0xFF的数据.
问题:对于9600bps,理论上开始位为104us,此杂波都不足以识别为开始位,为何被串口识别成了0xFF,且一直有收到? 此问题可使用一个GPIO模拟外部设备的发送来复现:
1.应用程序使用minicom,读取串口数据,使用的命令为: minicom -w -H -D /dev/ttymxc3 -b 9600
2.使用一个GPIO脚模拟外部设备发送的杂波,硬件上将此GPIO与RX连接.
3.控制GPIO每隔3s输出一个40~50us的低电平给串口的RX.测试代码入附件.

  • 打印寄存器:
当刚打开串口,有一个00的数据时候,寄存器异常:
94:0x2440, 98:0x408c
触发异常后的寄存器:
94:0x2410, 98:0x408d,
正常情况下的寄存器:
94:0x2050, 98:0x4088,

94寄存器的第10bit,6bit,4bit
98寄存器的第2,0bit
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 查阅手册
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    这个问题应该是控制器识别的出问题引起的,最后提交了到了nxp论坛也没解决.
    最后是让客户将输出的杂波给处理掉.

第四 UART收到的数据丢失的问题

经过示波器对比测试波形发现,外部RS232线接到我们设备上的时候 与不接上相比还是有不一样,原本-5v的波形,接上去后变为-1v 等等,幅值有所变化.
经过对比怀疑是ESD器件影响,将其去掉后恢复正常.
后来发现硬件与上一版本相比,ESD器件更换了.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/772740
推荐阅读
相关标签
  

闽ICP备14008679号