在对将通过以太网活动扩展的设备内部实现Digi ConnectME模块的调查中,我们遇到了串行端口的一些问题。
我们使用的是JTAG调试开发工具包附带的ConnectME模块,该工具包运行Net+OS 7.0。

背景描述:
应用程序执行双向TCP到串行桥接通道,其中串行数据块将在TCP端口上传输,也在相反的方向上传输。
在传输过程中,读取对象(在线程中运行)从rs232端口“/com0”读取原始数据,并将接收到的数据传递到缓冲区。在测试期间,设备(连接到串行端口)将在接收到字符后向ConnectME模块发送一条多字符行。

问题描述:
设备发送一个字符后,将所有的字符都发送给了ConnectME模块,但是读取对象并不能接收到发送的所有字符。在接收到多个数据块后,设备发送的最后一个数据块不会被读对象拒绝。注意rx_buf,这个缓冲区长度等于0,但并不是所有传输的数据都被拒绝。通过监控rs232链路,所有字符都被发送到ConnectME模块。
通过向外部设备发送一个新字符,将前一次传输的最后一个数据块与当前传输的数据块一起接收。
到目前为止,我们可以看到,有些东西覆盖了缓冲区标志,或者错过了串行驱动程序和源代码之间的一些同步。

源程序:
For (;;;)
{
tcgetcounters (rs232_handler &port_counters);
如果(port_counters。Nframe > 0) || (port_counters. 0)不流> 0)||
(port_counters。Norun >0 0))
退出(1);
其他{
tcgetbuffers (rs232_handler &port_buffers);
如果(port_buffers。Rxbuf > 0)
{
Return_value = read(rs232_handler, &character, 1);
If (return_value >)
{
Return_value = send(file_descriptor_client_connection,
&character, 1,0);
If (return_value <= 0) create_tcp_handler();
Else字符= 0x00;
}
}
}

tx_thread_relinquish ();

}

串口监控日志:

ConnectME模块将字符' a ' 0x41(十六进制)写入外部设备。设备用7个字符' 0 ' 0x30(十六进制)后面跟着字符' ACK '来应答。
159 0.00000751 IRP_MJ_WRITE SUCCESS长度1:34
160 0.28121659 IRP_MJ_READ超时时间3:30 30 30
161 0.00000000 IRP_MJ_READ长度80

20秒后再写“a”。之前的日志变为:
159 0.00000751 IRP_MJ_WRITE SUCCESS长度1:34
160 0.28121659 IRP_MJ_READ超时时间3:30 30 30
161 20.82727978 IRP_MJ_READ超时时间为1:30
162 0.00000782 IRP_MJ_WRITE SUCCESS Length 1:34
163 0.29683995 IRP_MJ_READ超时长度6:30 30 30 41 43 4B
164 0.00000000 IRP_MJ_READ长度80

谁能帮助我们解决这个问题,或者提供更多关于应用程序代码和串行驱动程序之间同步的信息,我们将不胜感激。

愉快的问候,

荷兰国际集团(ing)。马丁Scheuter
软件工程师
研发

如果您正在使用快速波特率,例如高于115k2波特率,那么您应该检查bsp.h中使用的串行驱动程序的状态。我也有类似的问题,我发现定义…

日志含义BSP_SERIAL_PORT_API设置为BSP_SERIAL_API_LEGACY
日志含义BSP_SERIAL_FAST_INTERRUPT设置为FALSE

这意味着,如果你使用慢波特率是可以的,但一旦你试图推动通信,那么字节丢失。

将它们设置为
BSP_SERIAL_PORT_API BSP_SERIAL_API_TERMIOS
BSP_SERIAL_FAST_INTERRUPT真实

看看结果如何。

这实际上是一个已知的问题。很快就会有一个补丁在支持网站上与一个串行驱动程序补丁纠正这个问题。如果您需要尽快获得补丁,请通过Web门户(//www.phdurl.com/support/eservice/login.jsp).

请注意,该补丁是基于NS7520的模块,如连接ME,连接EM等。

查理,

这个补丁有预估时间吗?这个补丁具体修复了什么?

谢谢,
布莱恩

工程部仍在寻找这个补丁的祝福(因此为什么它没有发布)。这个补丁实际上是我们的NDS(即插即用固件)串行驱动程序移植到。NET+OS。