您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> 求助: BF531 SPI SLAVE 通讯不成功
本帖共有1399个阅读者
发表帖子 发表投票 回复主题
求助: BF531 SPI SLAVE 通讯不成功
liu_nuist(论坛新手)
liu_nuist
头衔:社区公民
帮派:无帮无派
帖数:5
金钱:147
积分:7
注册时间:2011/11/12
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
求助: BF531 SPI SLAVE 通讯不成功

  我使用BF531的SPI slave 模式,采用中断方式收发数据,现在可以接收数据,但是偶尔接收的数据也会出错,但是如果在接收中断函数中添加发送数据 *pSPI_TDBR = 0x55; 那么以后接收数据也会出错,我的SPI主机接收的数据也不正确,具体代码如下,还高手指点一下。

/*
   SPI从机配置
*

void InitializeSpiSlave( void )
{

   *pFIO_DIR &= ~(PF0);   /* 将PF0置为输入 */
//   *pFIO_INEN |= (PF0);   /* 使能PF0输入缓冲 */
  
*pSPI_CTL = 0x30 | SZ | CPHA | CPOL;
*pSPI_CTL = (*pSPI_CTL | SPE); //使能SPI接口
ssync();          //系统同步
}

EX_INTERRUPT_HANDLER(SPI_ISR)
{
  

  if( *pSPI_STAT & RXS )
{
    
      asm("ssync;");

      it = *pSPI_RDBR;
//     *pSPI_TDBR = 0x55;    //如果添加此行代码 接收数据都不正确,发送出去的数据也不正确
}



学习啊
等级:论坛新手 参考IP地址:*.*.*.*
2012/2/16 10:15:47
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

SPI在发送数据之前,需判断传输数据的fifo是否为空。

如果你的时序匹配的合理的话,代码大致没有问题。

做以下检查:

1. 将SPI的速度降低,看是否还出错。

2. 将 CPHA 和CPOL四种配置模式都尝试一下,看时序是否符合。

3. SPI传输线长度不要超过10CM,如果是飞线连接测试,线能有多短就多短。


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/2/16 13:17:29
liu_nuist(论坛新手)
liu_nuist
头衔:社区公民
帮派:无帮无派
帖数:5
金钱:147
积分:7
注册时间:2011/11/12
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

谢谢 andy.

现在测试是  如果把MISO的线断开 上面的程序 BF531 SPI从机接收就没有问题,线是有点长

我在查查。。。


学习啊
等级:论坛新手 参考IP地址:*.*.*.*
2012/2/16 13:27:42
szrong3000(论坛新手)
szrong3000
头衔:社区公民
帮派:无帮无派
帖数:22
金钱:305
积分:27
注册时间:2012/1/10
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

论坛里的SPI参考程序就够你用了~~好好检查一下硬件,我前一段时间也是硬件问题,软件看起来暂时没发现什么太大出入,祝你好运;


blackfine 的初学者~~
等级:论坛新手 参考IP地址:*.*.*.*
2012/2/16 15:47:18
chris_syu(论坛新手)
chris_syu
头衔:社区公民
帮派:无帮无派
帖数:35
金钱:411
积分:49
注册时间:2012/12/17
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
各位好,想請問一下:

我是使用 BF533 (ADSP-EDU-BF533發展板) 與另一個 MCU 用SPI溝通, BF533為Slave , MCU為Master。
BF533 依樣採用 中斷的方式接收數據。以下是我對 SPI_CTL 的一些設定

*pSPI_CTL = 0x0630 | SZ; // slave Mode, CPOL = 0, CPHA = 1, EMISO = 1, PSSE = 1,

在測試的過程中,我需要將 PF0 pin 連接到 MCU端(Master) 的GND,才能正確的接收數據。如果讓 PF0 空接 或是 接到自己本身 (ADSP-EDU-BF533發展板) 的GND,都無法正確動作。

SPI 不是只需要由 Master 提供 CLOCK 給 Slave , 總共使用 SLK、MOSI、MISO 三條線就可以了嗎?  
PF0有無接到 Master 的GND為什麼會這樣影響?


正在學習使用ADSP-53x
等级:论坛新手 参考IP地址:*.*.*.*
2013/9/18 16:13:37
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
5信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
PF0是DSP 的SPI接口作为从机的 片选接口,即  SPISS  ,这个管脚不应该接地,应该连接你单片机的 SPISEL 接口。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2013/9/19 0:00:06
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.159276 Call, 1 Queries, Processed in 0.031006 second(s),