OpenEdv-开源电子网

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

SD卡实验中SD_SPI_ReadWriteByte(0xff)

[复制链接]

81

主题

270

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
452
金钱
452
注册时间
2014-8-11
在线时间
87 小时
发表于 2014-9-3 13:02:37 | 显示全部楼层 |阅读模式
5金钱
SD_SPI_ReadWriteByte(0xff)怎么实现提供了八个时钟周期

最佳答案

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

你的数据线写0xff,就是一直保持高,clk就有了8个,可以说只是发送的数据是0xff,这又不是SD的命令,但是它必须要靠控制器提供时钟才能工作,所以,给8个CLK,发送它不用的东西。
我是一只菜鸟,但我会大鹏展翅
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1836
金钱
1836
注册时间
2014-6-27
在线时间
981 小时
发表于 2014-9-3 13:02:38 | 显示全部楼层
你的数据线写0xff,就是一直保持高,clk就有了8个,可以说只是发送的数据是0xff,这又不是SD的命令,但是它必须要靠控制器提供时钟才能工作,所以,给8个CLK,发送它不用的东西。
回复

使用道具 举报

81

主题

270

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
452
金钱
452
注册时间
2014-8-11
在线时间
87 小时
 楼主| 发表于 2014-9-3 13:49:31 | 显示全部楼层
回复【2楼】TinyBoy:
----------------------------
为什么要保持高才有clk,譬如我的数据是0xfe  那最低位的传送也是需要一个clk的呀!我的意思就是如果发送0xfe   clk是不是八个
我是一只菜鸟,但我会大鹏展翅
回复

使用道具 举报

10

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1836
金钱
1836
注册时间
2014-6-27
在线时间
981 小时
发表于 2014-9-3 13:54:04 | 显示全部楼层
回复【3楼】战舰水手:
---------------------------------
 说了SD必须要控制器提供时钟才能工作,无论读写都要控制器提供8个clk,比如在读数据的时候,写0xff,提供8个CLk是为了把数据读回来。
回复

使用道具 举报

10

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1836
金钱
1836
注册时间
2014-6-27
在线时间
981 小时
发表于 2014-9-3 14:07:46 | 显示全部楼层
回复【3楼】战舰水手:
---------------------------------
 如果你写过读写分开的话就很容易理解了,是不是在读数据的时候要释放数据线,由发送数据方来控制数据线,高或者低,2个一起的时候,写0xff,就相当于在每个clk读数据位之前释放数据线。
回复

使用道具 举报

81

主题

270

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
452
金钱
452
注册时间
2014-8-11
在线时间
87 小时
 楼主| 发表于 2014-9-3 14:10:05 | 显示全部楼层
回复【4楼】TinyBoy:
---------------------------------
是不是这样一句话:SPI通信模式中,外设的读和写是同步完成的,若主机(控制器STM32)要读取从机(SD)的一个字节,就必须发送一个空字节来引发从机的传输。
我是一只菜鸟,但我会大鹏展翅
回复

使用道具 举报

10

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1836
金钱
1836
注册时间
2014-6-27
在线时间
981 小时
发表于 2014-9-3 14:21:39 | 显示全部楼层
回复【6楼】战舰水手:
---------------------------------
 SD由2条线来收发数据,所以你读的时候,MOSI应该保持不变,这样写看起来就是读和写是同步完成的。
回复

使用道具 举报

81

主题

270

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
452
金钱
452
注册时间
2014-8-11
在线时间
87 小时
 楼主| 发表于 2014-9-3 14:23:04 | 显示全部楼层
回复【5楼】TinyBoy:
---------------------------------
还有一个问题问一下:SD_WaitReady()函数中写道假如SD卡准备好了,则执行SD_SPI_ReadWriteByte(0xff)后主机会从从机收到0xff。
为什么从机返回的是oxff
我是一只菜鸟,但我会大鹏展翅
回复

使用道具 举报

10

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1836
金钱
1836
注册时间
2014-6-27
在线时间
981 小时
发表于 2014-9-3 14:36:16 | 显示全部楼层
回复【8楼】战舰水手:
你就理解为在执行某些操作之前,这样检测到0xff就代表SD准备好下一步操作了就行了。
回复

使用道具 举报

4

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2014-10-15
在线时间
0 小时
发表于 2014-11-3 21:49:50 | 显示全部楼层
 回复【2楼】 TinyBoy :
--------------------------您好,,其实这个我也不明白到底为什么写0XFF就可以实现8个脉冲保持???是不是和哪个时序图有关系啊??
还是和SPI的CPOL 极性设置有关??当CPOL为‘1’,总线空闲时SCK应上拉为高电平,因为0XFF不是SD卡的命令,故总线空闲,这时应该拉高SCK,但是SCK是怎么被拉高的啊???



非常感谢!!!!
我会好好努力的!
回复

使用道具 举报

10

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1836
金钱
1836
注册时间
2014-6-27
在线时间
981 小时
发表于 2014-11-4 08:19:10 | 显示全部楼层
回复【10楼】IchLiebeDich2014:
---------------------------------
首先,0xff不是SD卡需要的命令,再次,你发送0xff是不是8次保持数据线为高或者说释放数据线,发送0xff是在你要读SD卡返回数据的时候,你每次释放数据线,为高,SD卡返回的数据位是1,则保持,是0,则拉低,8次,是不读到返回的数据了。你会发现,发送0xff的一种情况是,你已经发送了一个其他命令了,这个命令发完,现在准备读取SD卡返回的数据了,这个时候发送0xff就是为了读数据嘛。
回复

使用道具 举报

4

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2014-10-15
在线时间
0 小时
发表于 2014-11-4 16:23:00 | 显示全部楼层
回复【11楼】TinyBoy:
---------------------------------
谢谢。。虽然还是有点不明白
我会好好努力的!
回复

使用道具 举报

10

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1836
金钱
1836
注册时间
2014-6-27
在线时间
981 小时
发表于 2014-11-4 16:40:42 | 显示全部楼层
回复【12楼】IchLiebeDich2014:
---------------------------------

你去看看别人分开写的SPI的读函数,是不是在判断数据位前,数据线设置为上拉输入,和你每个时钟给1都一个样嘛。
回复

使用道具 举报

4

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2014-10-15
在线时间
0 小时
发表于 2014-11-4 17:51:09 | 显示全部楼层
回复【13楼】TinyBoy:
---------------------------------
OK。。。
我会好好努力的!
回复

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
发表于 2015-7-24 15:43:02 | 显示全部楼层
回复【11楼】TinyBoy:
---------------------------------
是这样的吗?FF是MO引脚的数据,输入的是MI引脚,MO引脚释放和MI有什么关系呢?
合肥-文盲
回复

使用道具 举报

10

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1836
金钱
1836
注册时间
2014-6-27
在线时间
981 小时
发表于 2015-7-24 20:52:09 | 显示全部楼层
回复【15楼】合肥-文盲:
---------------------------------
你读SD卡的时候,当然是希望SD卡那边只发送数据给你,你发什么给它他不管,发0xff就是说它不理会这个命令,仍然只做发送数据的事情。
回复

使用道具 举报

10

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1836
金钱
1836
注册时间
2014-6-27
在线时间
981 小时
发表于 2015-7-24 21:06:27 | 显示全部楼层
回复【15楼】合肥-文盲:
---------------------------------
你读的时候,用MISO,这个时候MOSI总得保持一种电平吧,都是1或者都是0或者其他,所以你写的时候,MOSI该写什么就写什么,MISO不用管,你读时候,MISO是什么就读什么,这个是MOSI保持一个对SD卡来讲,相当于忽略的电平就行了,貌似0xff就是了。
回复

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
发表于 2015-7-27 09:46:28 | 显示全部楼层
回复【17楼】TinyBoy:
---------------------------------
MOSI在读的过程中发0xFF是为了保持在读的过程中MOSI线一直是高电平,相当于默认MOSI空闲状态是高电平的意思
合肥-文盲
回复

使用道具 举报

10

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1836
金钱
1836
注册时间
2014-6-27
在线时间
981 小时
发表于 2015-7-27 10:04:48 | 显示全部楼层
回复【18楼】合肥-文盲:
---------------------------------
理解它的用意就行了,有些不一定是0xff,灵活处理就行了。
回复

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
发表于 2015-7-27 12:11:43 | 显示全部楼层
回复【19楼】TinyBoy:
---------------------------------
...
合肥-文盲
回复

使用道具 举报

6

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2015-8-27
在线时间
1 小时
发表于 2015-11-3 18:29:59 | 显示全部楼层
大神们的讨论回答了我的问题,多谢!!!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 16:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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