This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DSP SCI

Other Parts Discussed in Thread: TMS320F28027

你好,我使用的是TMS320F28027,波特率是9600,单独收发送数据均正常。现在将接收到的数据发送出来,发现发出来的数据和接收到的数据不相同,请问这种现象有哪些原因?谢谢!

  • 单步看一下吧。看看SCI收到的数据是什么数据,程序中写到SCI发送寄存器的又是什么数据。

    另外下面例程包中的sci_echoback例程也可以参考。

    focus.ti.com.cn/.../sprc832.html

  • 单步调试时,程序写入到SCITXBUF中的数据依次是17、34、51、68、85、102、119、136、153、170、187、204、221、238、255和0,而接收数据SCIRXBUF中的数据依次是221、17、255、51、17、85、51、119、85、153、119、187、153、221、187和255。这个现象是和原因,另外发送数据是使用查询模式,接收使用中断模式。请求帮助,谢谢!

  • 在做loopback实验吗?那可以参考scia_loopback例程。

    1、既然单独收发送数据均正常,那说明硬件没有问题

    2、既然“发出来的数据和接收到的数据不相同”;那么应该是程序中什么地方写的有问题,您可以单步/断点;看看程序什么地方有问题,是芯片接收到的数据错误导致发送的数据错误;还是接收到的数据正确,但程序没写好导致发送的数据不是您想要发送的数据。

  • Leo

    您好!

    最大的可能是程序上的问题。您可以看一下到底收到的数据是什么。

  • 楼主可以全速跑,将发送和接收到得数据放入RAM中,如连续放8个字节,然后停下来看一下,接收和发送的数据是否一样,如果不一样看接收是否正确。软件上查一些软件上是否因为其它的中断导致接收数据部正确。

  • SCI通讯测试时,DSP上电后13ms时,用示波器测得SCITX发出一个“Framing Error”,其占据超过发送一帧数据(包括:1位起始位,8位数据位,1位停止位)的时间,然后接下发出来的数据是正确的,但第一组数据的校验和CheckSum有误,以下组的数据和校验和均是正确的,发送的每一组数据间间隔1000ms。每次上电后示波器上都会出现“Framing Error”这现象且只出现一次,请问如何解决?谢谢!

  • 想知道上电13ms时发的一帧数据,是软件上控制要发数只是发出来的数据不对,还是说这时软件上没有要发数据,是不应该出现的帧?还有就是第一组数的校验和不对,是因为多发了一帧数据,导致实际数据少发了一帧吗?能否详细介绍一些,你的软件流程?方便的话,楼主可以将最小项目附上来,我们实际分析一下。

  • Framing Error产生在SCI发送端发送的数据不符合接收端的要求的数据格式,然后被接收端判定为Framing Error,噪声也是导致Framing Error的一种可能。

    楼主上电后,TI的28027的SCI初始化有按照TI例程的初始化步骤么?楼主是怎么确认Framing Error的?28027和其他设备,比如电脑通信电脑也无法正常接收第一帧数据吗?

  •        上电13ms时发的一帧数据不是软件控制要发的数据,是不应该出现的数据帧!这样需要发的第一组数据的校验和有误,但软件控制发送的数据是正确的,第二组以后的数据和校验和都是正确的。

    SCITX:GPIO12

    SCIRX:GPIO28

    程序如下

    1)、SCI初始化

       SciaRegs.SCICCR.all =0x0007;                   // 1 stop bit,  No loopback
                                                                                    // No parity,8 char bits,
                                                                                    // async mode, idle-line protocol
       SciaRegs.SCICTL1.all =0x0003;                  // enable TX, RX, internal SCICLK, Disable RX ERR, SLEEP, TXWAKE
       SciaRegs.SCICTL2.bit.TXINTENA =0;
       SciaRegs.SCICTL2.bit.RXBKINTENA =1;
       SciaRegs.SCIHBAUD = 0x00;
       SciaRegs.SCILBAUD = 0xC2;
       SciaRegs.SCIFFTX.all=0xC022;
       SciaRegs.SCIFFRX.all=0x0022;
       SciaRegs.SCIFFCT.all=0x00;

       SciaRegs.SCICTL1.all =0x0023;                             // Relinquish SCI from Reset
       SciaRegs.SCIFFTX.bit.TXFIFOXRESET=1;
       SciaRegs.SCIFFRX.bit.RXFIFORESET=1;

    2)、发送模块

    main()

    {

        .................. 

      for(;;)                        

    {
         asm("nop");
         SCI_Delay();                                // 1000ms

        for(i=0;i<32;i++)
        {
               sdataA[i] = i + 1;
        }

        for(SCI_NUM=0;SCI_NUM<34;SCI_NUM++)    // Send Data
        {
      
               SciaRegs.SCITXBUF = sdataA[SendCount];
               while(SciaRegs.SCICTL2.bit.TXRDY == 0){};
               while(SciaRegs.SCICTL2.bit.TXEMPTY == 0){};
                DELAY_US(500);
      
                if(SCI_NUM < 32)
                {
                     CheckSum = CheckSum + sdataA[SendCount];
                }
               else
                {
                    sdataA[32] = CheckSum & 0x00FF;
                    sdataA[33] = ((CheckSum & 0xFF00) >> 8) & 0x00FF;
                }

                SendCount++;

                if(SendCount == 34)
                 {
                      SendCount = 0;
                      CheckSum = 0;
                 }  
          }
         SCI_SendDelay();                    // 100ms

    }

    }

    截取的上电时波形图如附件001.png,请帮忙!谢谢!

  • 可以在初始化SCI IO和SCI 断点之后设置断点,看TXD是否有被拉低,怀疑配置完SCI以后即出现第一帧无效数据。

    如果没有拉低,可以在SciaRegs.SCITXBUF = sdataA[SendCount];设断点,看程序复位到运行到这个断点之前是否有出现拉低,这样可以确定这一帧数据时在哪里产生的。

  • 除了楼上说的。

    我建议楼主再确认一下VDD上电时候的上电波形,以及楼主是怎么初始化GPIO口的,是怎么把GPIO引脚改成SCI功能的

    楼主的波形图,第一个不稳定可能是芯片上电时候的不稳定,第二个标准的拉低再拉高估计是楼主初始化GPIO时候不正确导致。(我这样猜猜,具体要楼主自己确认)

  • 楼主,实验做得怎么样了?

    问题解决没?解决了分享一下原因呗。

  • 非常感谢大家的帮忙!之前出现的现象是在初始化不正确!

  • SCI测试中发现,其他通讯器件每次只发送1次数据,DSP接收后不能改变成预先设定的功能,但其他通讯器件每次发送连续2次数据,DSP接收后就可以完成预先设定的功能。其中接收方式是使用中断模式。DSP的这种现象有哪些原因?

  • 楼主,新的问题开一个新的帖子吧,方便其他人查询。

    估计是程序逻辑的问题,或者是发送的数据没有触发FIFO中断,楼主,你用仿真器看一下为什么会这样。

  • 按之前楼主的初始化配置,应该设置了2级FIFO,因此接收到两个字节后才会产生接收中断。请楼主确认一下是否因为这个原因导致。

  • 谢谢大家的帮忙,这个是由于GPIO初始化没有配置好,及中断标志错误导致的!

  • 楼主你好 我也在用F28027的SCI 也是中断接收和查询发送,我问题也调了好几天了,很郁闷

    不知道问题出现什么地方

    我要连续发送多次才能接收到,就是串口助手发送多次数据 CPU的接收缓冲区才收到正确的数据,不知道什么地方的问题

    可否参照下你的

     

     

  • 您好!

    请问您的FIFO如何设置,请确认FIFO设置?同时请确认您接收中断方式。

    可以参考TI官方提供的例程。

x 出现错误。请重试或与管理员联系。
x 出现错误。请重试或与管理员联系。