普通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
1楼-- · 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;
}


萧洛
2楼-- · 2019-07-21 12:04
1111111
萧洛
3楼-- · 2019-07-21 16:11
1111111111111
萧洛
4楼-- · 2019-07-21 21:38
 精彩回答 2  元偷偷看……
Acuity
5楼-- · 2019-07-22 02:31
1、没看到片选使能和失能,读写1bit没必要延时5ms这么长时间;
2、时钟线、片选线、sdo线设置为推挽输出;
3、sdi线设置为浮空输入。
萧洛
6楼-- · 2019-07-22 08:05
Acuity 发表于 2017-9-14 14:08
1、没看到片选使能和失能,读写1bit没必要延时5ms这么长时间;
2、时钟线、片选线、sdo线设置为推挽输出; ...

大哥,你帮我看下,好不

一周热门 更多>