[技术问答] nuc972串口485模式自动重启

[复制链接]
760|7
 楼主 | 2017-2-13 14:40 | 显示全部楼层 |阅读模式
硬件:nuc972,串口6、串口10外接485接口电路,(PB2---ttyS6发送 接 485发送,PB3---ttyS6接收 接 485接收,PB4---ttyS6 RTS 接 485收发控制;PB12---ttyS10发送 接 485发送,PB13---ttyS10接收 接 485 接收,PB14---ttyS10 RTS 接 485收发控制)。两串口经过485芯片后,将A、B互连。
软件:linux  BSP nuc970bsp-release-20151106。应用程序是bsp中的applications/demos/uart/的例程,在uart.c的open_port函数末尾return前增加如下代码用于使能串口的485模式:
struct serial_rs485 Set485;
memset(&Set485,0,sizeof(struct serial_rs485));
Set485.flags |= SER_RS485_ENABLED;
ioctl(portfd,TIOCSRS485,&Set485);
经过测试,这样修改可以使能串口的485模式,但是收发脚的极性是反的。(发送变低,接收变高)所以将
Set485.flags |= SER_RS485_ENABLED; 修改成 Set485.flags |= SER_RS485_ENABLED | SER_RS485_RTS_ON_SEND。但改成这样后只要一运行,系统就复位了。
linux-3.10.x/drivers/tty/serial/nuc970_serial.c中的代码在函数nuc970serial_config_rs485函数中 SER_RS485_RTS_ON_SEND只影响了如下代码:
   if(rs485conf->flags & SER_RS485_RTS_ON_SEND){
      serial_out(p,UART_REG_MCR,(serial_in(p,UART_REG_MCR) & ~0x200));
   else
      serial_out(p,UART_REG_MCR,(serial_in(p,UART_REG_MCR) | 0x200));
   }
只是修改了UA_MCR的bit9,和编程手册中的说明是一致的,不明白改一下RTS引脚的极性为啥会导致系统复位,有没有人碰到和我一样的问题?
| 2017-2-13 19:08 | 显示全部楼层
能否确定是什么类型的复位不能?
 楼主 | 2017-2-13 22:50 | 显示全部楼层
请问如何确定复位类型?复位后进入uboot。板子未留jtag接口
| 2017-2-13 22:54 | 显示全部楼层
修改那个是不是引起了一个什么复位的中断。
| 2017-2-14 11:33 | 显示全部楼层
这个芯片需要官方的人来支持一下,官网上提供的资料实在有限。
| 2017-2-14 16:38 | 显示全部楼层
实在无法理解改了这么一点怎么就不行了。
 楼主 | 2017-2-15 10:12 | 显示全部楼层
问题找到了,不是新塘的问题。是板子上5V->3.3V的Buck中电感被贴片厂转了90度贴上了。用示波器看,3.3V虽然出来了,但毛刺很多。之前用万用表确认了一下电压正常,就没用示波器看过3.3V的电压。估计系统处于复位的边缘,串口一发,功耗变动就复位了。
| 2018-1-14 16:56 | 显示全部楼层
carbon 发表于 2017-2-15 10:12
问题找到了,不是新塘的问题。是板子上5V->3.3V的Buck中电感被贴片厂转了90度贴上了。用示波器看,3.3V虽然 ...

厉害,看来电源问题可以影响的太多了,比如ADC,还有你说的这个。昨天看个贴说是ADC转换,一段不是直线,后来也是电源的问题,看来电源一定要做好啊,,电路的心脏
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

分享 快速回复 返回顶部 返回列表