如题
离线
感谢大家, 参考上面的代码, 逻辑分析仪发现时序控制脚时序还是不对。
离线
感谢晕哥,我再按上面的试一试。
离线
询问了以前用f1c100s控制 da14585 蓝牙芯片的朋友, 他说:
改 8250_port.c 里面的 serial8250_tx_chars()
这里发送数据前控制电平(高),
发完送数据前控制电平(低)
因为我的f1c100s io 口检测 da14585 的 cts 引脚电平,
如果为高电平就等待,
如果为低电平就启动发送。
我的这个流控逻辑和你的RS485逻辑基本一样。
差不多搞定了, 就是按上面晕哥的建议修改, 逻辑分析仪显示时序正常了.
离线
在外部可以加一个三极管,自动控制读写
客户要求用 gpio 驱动里面控制
离线
离线
再找到一篇好文: Linux-485收发切换延迟的解决方法
3.1 由应用程序控制是否打开串口设备的485功能
在串口驱动里切换485方向对性能有一些影响。
而某些应用可能只需要标准串口,不需要支持485模式。
因此最好由应用程序来控制,是使用标准串口还是支持485模式的串口。
这主要利用ioctl()实现。
应用程序在初始化打开串口时,禁用/使能串口的485模式
fd = open(...);
init_serial(fd, ...);
struct serial_rs485 rs485conf;
rs485conf.flags |= SER_RS485_ENABLED; // 使能本串口485模式,默认禁用
ioctl(fd, TIOCSRS485, &rs485conf);
驱动程序中对使能了485模式的串口作特殊处理。
利用struct uart_8250_port结构体中的struct serial_rs485 rs485成员判断串口是否支持485模式。
在serial_8250.h中有定义rs485数据成员,以及设置此数据成员的成员函数rs485_config
离线
根据楼上这篇文章彻底解决了驱动中gpio控制RS485方向控制问题:
serial8250_tx_chars() 函数中执行 __stop_tx(up) 之后:
//等待发送完成
while (port->ops->tx_empty(port) != TIOCSER_TEMT)
{
;
}
gpio_set_value(133, 0);//拉低PE5, 进入接收状态
离线