普通IO口模拟SPI读写flash,求指点问题在哪里。

2019-07-21 08:23发布

写不进去值,返回值一直都是FF。
u8 Spi_Write_Byte(u8 data)
{
   u8 i,num=0;
   for(i=0;i<8;i++)
   {               
     SPI_FLASH_SCLK=0;                 
     if(data&0x80)
       SPI_FLASH_SDO=1;
     else
       SPI_FLASH_SDO=0;
      data=data<<1;   //°&#209;×&#238;&#184;&#223;&#206;&#187;í&#198;μ&#244;£&#172;òò&#206;aò&#209;&#190;-D′&#189;&#248;è¥á&#203;
                 delay_us(5);
                 SPI_FLASH_SCLK=1; //à-&#184;&#223;ê±&#214;ó£&#172;±£3&#214;êy&#190;Yμ&#196;&#206;è&#182;¨D&#212;&#161;£
                 delay_us(5);
               
                 
                 num=num<<1;
                 if(SPI_FLASH_SDI==1)
                 num++;
                 SPI_FLASH_SCLK=0;     //ê±&#214;ó&#212;ù′&#206;à-μí£&#172;·&#197;μ&#189;×&#238;oó&#195;&#230;à′
                 delay_ms(5);
   }

  return num;
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
9条回答
shuaigew88
2019-07-21 10:16
本帖最后由 shuaigew88 于 2017-9-14 14:26 编辑

u8 Spi_ReadWrite_Byte(u8 data) //SPI读写函数,data为要发送数据 。需要读时data任意值即可
{
   u8 i,tmp=0;   SPI_FLASH_SDI =INPUT; //SDI配置成输入模式
   for(i=0x80;i!=0;i>>=1)
   {               
     SPI_FLASH_SCLK=0;                 
     SPI_FLASH_SDO=(data&i)?1:0;
     SPI_FLASH_SCLK=1;delay_us(1);         
     if(SPI_FLASH_SDI)tmp|=i;

     return tmp;
}


一周热门 更多>