和AT89C51ED2的bootloader通信。ED2的bootloader会收到一个字节就立即返回这个字节。
使用了485,但485是个半双工的通信方式。而ED2的bootloader是双工通信。
如果上位机连续发送,ED2立即返回接受的字节,会在485总线产生冲突,从而不能正常通讯。
处理方法:
VB 用mscomm控件写上位机发送程序,一次发送1个字节,延时等待(或者在接收事件中再发生下一个字节)接收到返回的1个字节后再发送下一个字节。
问题:
VB的整个过程效率太低下了,57600波特率,2个停止位,发送64K数据(实际还要增加大约10%的命令头,尾等信息)需要大约22分钟。
而厂家提供的双工模式下的通讯程序只要1-2分钟。
即使双工变半双工,理论上应该2-4分钟就可以完成。
怎么提高速度?
多种选择:
1 采用 4 线制 RS-485 架构,做成全双工。
2 仍采用 2 线制 RS-485 架构,每字节切换传输方向。在 PC 端,不要采用延时方式,而是使用 OnComm 事件触发,接收并发送一字节。
PC 的速度是很快的。如果没有有意的延时,一般不会影响到串口通讯的速度。
问题是否出在 RS-232 转 RS-485 的环节?
你一定要得到芯片返回的字节吗?如果不是必要的,在从机硬件方面做一些改动,在这个操作期间,芯片的 TXD 不要连接到 RS485 去,RS485 的 2 条线仅用作主机发送的差分信号。把芯片返回数据忽略掉。
如果一定要返回的字节,就改成 4 线制,或者找能够更快转换发送方向的 232-485 转换器。
有一点你没有说清楚,厂家双向模式的程序不是用当前 RS485 环境测试的吧?
还有一点,你和转换器的波特率是 57600,并不意味着 RS485 线上的波特率也是这么高。RS485 远距离传输时,波特率一般都低于 9600。距离越远,可实现的波特率就越低,有用 1200 的。
因此,与 RS232 传输相比,速度差个几倍十几倍,很正常。