TI中文支持网
TI专业的中文技术问题搜集分享网站

BRKDT标志位的误触发

在使用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

楼主如果最后找出原因记得分享一下。

赞(0)
未经允许不得转载:TI中文支持网 » BRKDT标志位的误触发
分享到: 更多 (0)