微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > CC2530读取SPI Flash数据错位问题

CC2530读取SPI Flash数据错位问题

时间:10-02 整理:3721RD 点击:

      cc2530 终端上面外接了一块SPI Flash. 在裸机(不跑协议栈的时候)上面测试Flash的时候,一切读写正常; 如果终端没有加入协调器的时候,测试SPI Flash的读写也是一切正常;

      当终端加入协调器后,从0地址读取Flash的时候,读出来的数据就错位了(比如,第一个字节的数据变成了第二个字节的数据,第二个字节的数据变成了第三个字节的数据)。这时当协调器断电以后(终端断开连接),读出来的数据依旧错位。

  

问题终于解决了。在读取单个字节的时候,发送完0xFF(Command)以后,等待发送完成的方法有问题,以前是这样的读取一个字节的:

uint8 SPI_ReadWriteByte( uint8 Command )
{
   uint8 Rxdata;
   U1DBUF = Command;
   while( 0 == ( U1CSR & ( 1 << 1 ) ) ); //直到发送完成
   U1CSR &= ~( 1 << 1 ); //clear flag  
    Rxdata = U1DBUF;
    return Rxdata;
}

采取这种方式会导致连网以后,在最后一个时钟周期,没有片选信号。采用以下方式即可解决:

uint8 SPI_ReadWriteByte( uint8 Command )
{
   uint8 Rxdata;
   U1DBUF = Command;
  // while( 0 == ( U1CSR & ( 1 << 1 ) ) ); //直到发送完成
   while (U1ACTIVE);
   U1CSR &= ~( 1 << 1 ); //clear flag
   Rxdata = U1DBUF;
   return Rxdata;
}

您好:

我也遇到了类似的读取数据错误问题;

这里提到的寄存器ACTIVE位Datasheet的解释是:USART transmit/receive active status. In SPI slave mode, this bit equals slave select.

这里使用master mode ,还是应该判断TX_BYTE,也就是while( 0 == ( U1CSR & ( 1 << 1 ) ) ); 

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top