我在用SCI模拟RFID卡的接收,从协议上,和SCI很近,不同点是,在一帧开始的时候,会有10个低位,然后两个高位,结束时也是10个低位,两个高位。比特率在106k。然后因硬件电路原因,结束后会变低电平3ms。下一次启动在900ms以后了。
平台是28335
我采用FIFO进行读取,然后通过FIFO RX的最高位也就是SCIFFFE,而且读数是否为0来判断是否是帧起始和帧结束。发生拉低电平时,会触发BRKDT,然后我会在3ms内检测三次,然后重开SCI,重开的程序如下:
inline void resetSCI()
{
ScibRegs.SCIFFRX.bit.RXFIFORESET = 0;
ScibRegs.SCICTL1.bit.SWRESET = 0;
asm("NOP");
ScibRegs.SCICTL1.bit.SWRESET = 1;
ScibRegs.SCIFFRX.all=0x204f;
}
但我发现个很奇怪的现象,就是我的读数经常会出错,而且有时上帧正确,下帧就错误,而且错误帧的SCIFFFE都是1,数也不对,但是错误帧的字节数是对的,和正确帧是一样的。
然后我在每次读取时用个数组记录了定时器的时间,我发现在时序上,也没有太大的时间差距问题,不同帧间的误差有,但认为应在合理范围。请问这是怎么回事,是否我 对BRKDT的理解有些问题。
Suke Wang:经实践检查,发现每一字节的起始位被判断早了两位,因而导致读取问题,按预估,原本读数本该是0x8000,0x8015,0x8002,0x8002,0x008A,0x00FD,0x8000,实际读到的是0x8000,0x8015,0x8002,0x8002,0x008A,0x00FD,0x8000。这些数中8为最高的SCIFFFE,逻辑我已经在上边解释了,8000应该对应的是10个0,2个1.波特率应该是13.56M/128 =106 k,我的baud设置的是176,这是什么原因。