赞
踩
/unit_tests/memtool
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
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
28.4.2 GPIO pad structure
// 初始化串口
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();
后来,经过客户问题反馈,这样处理还是会出问题.
拓扑图:
云服务器
|
|
|
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的收发脚切换,还没到受模式,客户端就已经开始传输数据,会导致前面一些数据丢失
发送一字节的
在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
查阅手册
这个问题应该是控制器识别的出问题引起的,最后提交了到了nxp论坛也没解决.
最后是让客户将输出的杂波给处理掉.
经过示波器对比测试波形发现,外部RS232线接到我们设备上的时候 与不接上相比还是有不一样,原本-5v的波形,接上去后变为-1v 等等,幅值有所变化.
经过对比怀疑是ESD器件影响,将其去掉后恢复正常.
后来发现硬件与上一版本相比,ESD器件更换了.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。