在使用28027进行485通讯时,使用8位数据位+1位地址位+1位停止位的方法进行通讯。
其中地址为1是标识该字节为地址,0标识该字节为数据。
当接收数据为0x00+0时,包含起始位一共会有连续10位的低电平发生,此时28027会误认为BRKDT,通过阅读ds,发现触发BRKDT的前提是先丢失一位停止位,但实际工作情况下,并未有FE中断产生?
请问这是28027的缺陷,还是我们通讯方式有问题?
Forrest:
这个问题,我抛砖引玉一下。
我认为,肯定不是28027的缺陷,也应不是通信方式有问题,可能是楼主的开发板上的通信受到了干扰。
BRKDT的前提是先丢失一位停止位后再发生10位的拉低,应该是丢失停止位先产生Framing error,FE位置位后再十位拉低产生BRKDT。
具体的最好把SCI模块单列出来测试一下,我这里最近不方便做实验,楼主自己测试一下吧。
在使用28027进行485通讯时,使用8位数据位+1位地址位+1位停止位的方法进行通讯。
其中地址为1是标识该字节为地址,0标识该字节为数据。
当接收数据为0x00+0时,包含起始位一共会有连续10位的低电平发生,此时28027会误认为BRKDT,通过阅读ds,发现触发BRKDT的前提是先丢失一位停止位,但实际工作情况下,并未有FE中断产生?
请问这是28027的缺陷,还是我们通讯方式有问题?
yi wang:
回复 Forrest:

但我在实验中发现,FE位始终没有被置位,仅仅是BRKDT位被置位。如图,蓝色脉冲为接收中断添加的debug信号,实际测量mcu RX口的信号没有噪声!
在使用28027进行485通讯时,使用8位数据位+1位地址位+1位停止位的方法进行通讯。
其中地址为1是标识该字节为地址,0标识该字节为数据。
当接收数据为0x00+0时,包含起始位一共会有连续10位的低电平发生,此时28027会误认为BRKDT,通过阅读ds,发现触发BRKDT的前提是先丢失一位停止位,但实际工作情况下,并未有FE中断产生?
请问这是28027的缺陷,还是我们通讯方式有问题?
yi wang:
回复 Forrest:

这个图片是直接测量的RX引脚的波形。
中断函数里面的结构是这样的
isr
{
if(brkdt)
{…}
else if(RXRDY)
{…}
if(OE || FE)
{…}
}
在使用28027进行485通讯时,使用8位数据位+1位地址位+1位停止位的方法进行通讯。
其中地址为1是标识该字节为地址,0标识该字节为数据。
当接收数据为0x00+0时,包含起始位一共会有连续10位的低电平发生,此时28027会误认为BRKDT,通过阅读ds,发现触发BRKDT的前提是先丢失一位停止位,但实际工作情况下,并未有FE中断产生?
请问这是28027的缺陷,还是我们通讯方式有问题?
yi wang:
回复 yi wang:
我在brkdt 和OE|| FE 两个条件下面添加了低电平的debug信号,上图所见的黄色脉冲,可见,还是只有brkdt被触发
在使用28027进行485通讯时,使用8位数据位+1位地址位+1位停止位的方法进行通讯。
其中地址为1是标识该字节为地址,0标识该字节为数据。
当接收数据为0x00+0时,包含起始位一共会有连续10位的低电平发生,此时28027会误认为BRKDT,通过阅读ds,发现触发BRKDT的前提是先丢失一位停止位,但实际工作情况下,并未有FE中断产生?
请问这是28027的缺陷,还是我们通讯方式有问题?
Forrest:
回复 yi wang:
另外如果有用FIFO也请看一下,FIFO中读出的数据,是否有某个数据的SCIRXBUF[SCIFFFE]置位
这个问题,我认为争议的焦点在 BRKDT位被置位 但SCIRXST[FE]没置位;我试了很多次,没能够让BRKDT位置位而SCIRXST[FE]不置位。
那么有下面几种可能
1、我搞错了,有其他方法导致BRKDT产生,但不需要missing stop bit,或者framing error不会产生
2、您的测试方法有问题
3、芯片有问题,不过SCI这个模块出来了十几年,这个可能可以排除。
我找TI美国再去确认一下,明天回复您。
在使用28027进行485通讯时,使用8位数据位+1位地址位+1位停止位的方法进行通讯。
其中地址为1是标识该字节为地址,0标识该字节为数据。
当接收数据为0x00+0时,包含起始位一共会有连续10位的低电平发生,此时28027会误认为BRKDT,通过阅读ds,发现触发BRKDT的前提是先丢失一位停止位,但实际工作情况下,并未有FE中断产生?
请问这是28027的缺陷,还是我们通讯方式有问题?
yi wang:
回复 Forrest:
十分感谢, 我刚才再次测试了一下,连续6个字节的数据,前三个字节正确,并触发RXRDY标志位,第四个字节结尾处触发BRKDT标志位。
在使用28027进行485通讯时,使用8位数据位+1位地址位+1位停止位的方法进行通讯。
其中地址为1是标识该字节为地址,0标识该字节为数据。
当接收数据为0x00+0时,包含起始位一共会有连续10位的低电平发生,此时28027会误认为BRKDT,通过阅读ds,发现触发BRKDT的前提是先丢失一位停止位,但实际工作情况下,并未有FE中断产生?
请问这是28027的缺陷,还是我们通讯方式有问题?
Forrest:
回复 yi wang:
SCIRXST[FE]置位没?
在使用28027进行485通讯时,使用8位数据位+1位地址位+1位停止位的方法进行通讯。
其中地址为1是标识该字节为地址,0标识该字节为数据。
当接收数据为0x00+0时,包含起始位一共会有连续10位的低电平发生,此时28027会误认为BRKDT,通过阅读ds,发现触发BRKDT的前提是先丢失一位停止位,但实际工作情况下,并未有FE中断产生?
请问这是28027的缺陷,还是我们通讯方式有问题?
yi wang:
回复 Forrest:
没有! 第四个字节是0x00,FE置位也应该表示是第三个字节接收错误吧! 问题是前三个字节都正常,第四个字节直接出现的BRKDT, 过程中没有FE出现。
在使用28027进行485通讯时,使用8位数据位+1位地址位+1位停止位的方法进行通讯。
其中地址为1是标识该字节为地址,0标识该字节为数据。
当接收数据为0x00+0时,包含起始位一共会有连续10位的低电平发生,此时28027会误认为BRKDT,通过阅读ds,发现触发BRKDT的前提是先丢失一位停止位,但实际工作情况下,并未有FE中断产生?
请问这是28027的缺陷,还是我们通讯方式有问题?
Forrest:
回复 yi wang:
如第一个帖子谈到,我这里最近实验做起来不方便,只能大致试一下,但我试下来FE都是置位的。
对于这个问题,我得到的回复如下:
As SCI user guide mention:"A break condition occurs when the SCI receiver data line (SCIRXD) remains continuously low for at least ten bits,beginning after a missing first stop bit“.
So RX line should cause a frame error,set SCIRXST[FE] ,then after this missing stop bit which cause frame error, if ten more bit durations are low on RX, then a BRKDT occurs,SCIRXST[BRKDT] set.
Is there anything I have misunderstood?Does any other way cause BRKDT set and SCIRXST[FE] didn't set?
You are correct that FE occurs first and then if at least ten more bit durations are low on RX, a BRKDT will occur. This is the only way for a BRKDT to occur.
另外这个帖子,楼主参考一下:
e2e.ti.com/…/671664.aspx
楼主如果最后找出原因记得分享一下。
TI中文支持网



