|
系统:S3C2440 + WINCE5.0
目的:使用S3C2440的COM2与外部设备的串口通信。
过程
(1)先使用WINCE中的串口调试器,固定用115200发送50个16进制的协议字节;
(2)外部设备正确接收到协议字节后,会回送120个字节;
出现的问题:
WINCE中串口调试器发送完50个字节后,收到了外部设备回送的字节,但是实际只收到104个,发现协议开头的20个字节丢了,多了4个未知字节,从第21个字节到协议尾巴的校验位前第119个字节都是正确的,校验位却是有时候正确,有时候错误。这是怎么回事?
如果物理线路有问题,那么我ARM发出去的数据应该也有问题,外部设备就不可能正确响应协议数据了,但收到的数据中正确的数据占了82%,是否这可排除物理线路;
我在串口驱动pdds3c2440_ser.cpp,函数
ULONG CPdd2440Uart::ReceiveInterruptHandler(PUCHAR pRxBuffer,ULONG *pBufflen) 接收部分
if (DataReplaced(&uData,(uLineStatus & UERSTATE_PARITY_ERROR)!=0))
{
*pRxBuffer++ = uData;
ReceiveBuffer[ReceiveBufIndex++] = uData; // 增加了一个缓冲,在COM1中打印用于观察接收到的数据
dwRoomLeft--;
dwBytesStored++;
}
所得结果也是上面的描述问题,那是否能说ARM接收数据时是没问题的,那问题出在哪呢?传输过程中???
请大虾们指点指点啊,多谢了!!!
|
|