OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3847|回复: 9

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

[复制链接]

7

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2017-5-24
在线时间
23 小时
发表于 2017-9-14 11:39:04 | 显示全部楼层 |阅读模式
10金钱
写不进去值,返回值一直都是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;
}


最佳答案

查看完整内容[请看2#楼]

u8 Spi_ReadWrite_Byte(u8 data) [/backcolor]//SPI读写函数,data为要发送数据 。需要读时data任意值即可 {[/backcolor] u8 i,tmp=0;[/backcolor] SPI_FLASH_SDI =INPUT; //SDI配置成输入模式 for(i=0x80;i!=0;i>>=1)[/backcolor] { [/backcolor] SPI_FLASH_SCLK=0; [/backcolor] SPI_FLASH_SDO=(data&i)?1:0;[/backcolor] SPI_FLASH_SCLK=1;[/backcolor]delay ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

54

主题

372

帖子

0

精华

高级会员

Rank: 4

积分
979
金钱
979
注册时间
2016-6-15
在线时间
474 小时
发表于 2017-9-14 11:39:05 | 显示全部楼层
本帖最后由 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;
}


回复

使用道具 举报

7

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2017-5-24
在线时间
23 小时
 楼主| 发表于 2017-9-14 12:05:11 | 显示全部楼层
1111111
回复

使用道具 举报

7

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2017-5-24
在线时间
23 小时
 楼主| 发表于 2017-9-14 12:27:00 | 显示全部楼层
1111111111111
回复

使用道具 举报

7

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2017-5-24
在线时间
23 小时
 楼主| 发表于 2017-9-14 13:41:48 | 显示全部楼层
21112112121
回复

使用道具 举报

2

主题

685

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3448
金钱
3448
注册时间
2017-7-4
在线时间
869 小时
发表于 2017-9-14 14:08:40 | 显示全部楼层
1、没看到片选使能和失能,读写1bit没必要延时5ms这么长时间;
2、时钟线、片选线、sdo线设置为推挽输出;
3、sdi线设置为浮空输入。
回复

使用道具 举报

7

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2017-5-24
在线时间
23 小时
 楼主| 发表于 2017-9-14 14:13:19 | 显示全部楼层
Acuity 发表于 2017-9-14 14:08
1、没看到片选使能和失能,读写1bit没必要延时5ms这么长时间;
2、时钟线、片选线、sdo线设置为推挽输出; ...

大哥,你帮我看下,好不
回复

使用道具 举报

11

主题

1044

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3722
金钱
3722
注册时间
2011-5-23
在线时间
2013 小时
发表于 2017-9-14 14:45:01 | 显示全部楼层
调这种总线,如果有问题,第一步就是逻辑分析仪架上。
RT-Thread RTOS 音频,WIFI,蓝牙
回复

使用道具 举报

2

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2018-8-7
在线时间
74 小时
发表于 2018-11-2 16:53:54 | 显示全部楼层
你延时太多了
回复

使用道具 举报

64

主题

446

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1032
金钱
1032
注册时间
2017-7-26
在线时间
275 小时
发表于 2018-11-3 09:14:44 | 显示全部楼层
Acuity 发表于 2017-9-14 14:08
1、没看到片选使能和失能,读写1bit没必要延时5ms这么长时间;
2、时钟线、片选线、sdo线设置为推挽输出; ...

他那是us延时,哈哈

不过楼上这位说得对
检查IO设置,还有加上片选
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 10:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表