原来 SDHC 只用3个命令就可以完成初始化~~~~~~~~
我发现 SDHC 只用3个命令就可以完成初始化~~~~~~~~(1)CMD0---->00 --->(2)CMD8--->01 --->(3)CMD1 --->00
|sdhc=1
|
---->05
sdhc=0
SDHC只是区别是高速卡还是低速卡,高速卡的时候,CMD16等读写扇区命令是直接输入扇区号码,低速卡时候输入的是扇区号*512
好简单吧~~~~~~~
代码就不用贴了,目前测试SD,MMC卡基本都过了,SDHC卡仅测试了APACER 16G 和KINGSTONE 8G 以及SANDISK的4G ~~~~~ 哈哈,我先顶下。
1、楼主是SPI的接口模式吗?
2、初始化后就能读写了吧?
打扰楼主了,能解答下吗? 学习. 请问SDHC还支持SPI模式么,还是只支持SDIO模式
另外请问您侧过写512个字节的时间么,我用一个2G的micor SD卡写512个字节居然用了将近8ms(SPI模式,4Mbit/s)
主要消耗都在写SD卡的时间上面了(改变SPI速度和内核速度都没有什么太大的影响)
感谢 我只做了SPI模式的,初始化直接用高速 20M,我开始时候也是用低速的,后来发现竟然高速下也可以,次数大概是1000次
(实际计算过大概400次@16MHZ,600次@20MHZ就可以完成CMD0)
速度嘛,没有用到DMA,读写1024个扇区大概18秒这样~~~ 而且用了很多FOR语句,我用FASTAVR,如果是C的话,估计还要快~~~~~ 完成CMD1之后,按照别人的代码继续执行即可,可以关CRC,可以读写扇区了~~~ mark mark “读写1024个扇区大概18秒这样”
大概一个扇区18毫秒,比我的还慢呀。
个人感觉和数据传输模式没什么关系,因为主要的时间耽搁在了SD写盘上面。
你说的20M和16M指的是什么?MCU频率还是SPI 的速率。
aaa1982 是的,SPI的速率,不过我也说了,我不是用DMA传输的,具体情况优化代码后才知道,
我现在是用FOR和WHILE来读取数据的,而且还是BASIC语言,如果是C的话,速度还要快~~~~~
我说的只是简化初始化程序而已,适合资源紧张的情况~~~~~ aaa1982
你有没有测试过你读SD的速度,读512字节时间是多少?
我现在读512字节,6ms(SPI模式,4Mbit/s) mark HZZCL
我和你读数据的速度差不多,也是6ms左右。(4Mbit/s)
你写数据多少时间,
而且我发现了一个比较搞笑的现象。
fat16文件系统下面先写文件信息,再写数据,都是一个扇区的操作,
居然写文件信息的时候waitbusy的时间比写文件的waitbusy时间长很多,用同一个变量作为标准,一个是32,一个是92.
没想清楚这是为什么?难道和写扇区的顺序相关,先写的waitbusy时间长???
欢迎各位踊跃发言,谢谢 我现在没有测试写数据,现在就发现SPI利用率太低了。
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3693785&bbs_page_no=1&bbs_id=1000 看了一下,感觉你给的图片和spi没太大关系
一般spi时钟都是系统时钟的分频,具体几分频要看具体的器件。如果字节中间不需要延时,4Mbit/s完全可以到500kbyte/s。
我们来算一下,我往SD卡里面通过spi写数据的时候就基本上一个扇区的数据中间没有延时。这样也就需要1ms多一点点。
其余的时间除了等待data response 就是等待wait busy了。
总共耗去了10ms左右,而且还在不同的时候有不同的等待时间,这一点没想明白。 aaa1982
你可以用示波器测下,SPI的CLK是不是有停止的时候。 如果需要高速读写的,肯定要DMA~~~
读的话,我是先发CMD17,然后一直发0XFF,直到收到0XFE(大概循环3-12次之内,看SD卡的牌子),然后开始读取0-511个字节。 HZZCL :
看了一下,确实有停止的时候,现在还没有弄清楚是不是SPI控制器本身的限制还是程序哪里的问题。我用的luminarylm3s5749,你用的哪家的?
看了看datasheet好像SSI章节没有提到相关的时间常数,你看到哪里有对那段字节之间的间隔的定义了么?
90999
DMA只是让CPU在传输数据的时候少负担,本质上提高不了什么速度。对SD更是如此,ns级别的寄存器赋值和ms级别的SD卡读写,就算把给SPI寄存器赋值的时间都省掉,对于SD的读写时间来说也没什么太大的意义。 我现在也就困在这个地方,估计是SPI控制器的问题。
本来是想用SPI跑到1M byte/s,现在看来用SPI模式是不行了,考虑下SD模式。 官方文档有初始化流程,建议照这个初始化 初始化已完成,缺的就是速度不够快。 实际测试了下,读取也就320kb/s上下~~~~~ WhatsThat
麻烦,懂么~~~~~~ 如果读取也就320kb/s上下,那速度不快.我的现在读取是420k byte/s,SPI模式. HZZCL
lm3s在spi的时候每个字节要隔两个spi时钟,这么算最多在4Mbit/s的时候可以做到400k,50M的时钟速度,基本上指令开销就可以忽略了。
你用的时哪个片子上面的spi控制器,420k是多大spi时钟下面的。
提高mcu速度以后经常发现连续之行命令不好使了,还得手动延长命令之间的间隔,看了一下sd spec,没找到命令之间的间隔底线的数据,
你是怎么做的?
aaa1982 我用的MCU为ATMEGA168-20AU,SPI的clk为10M bit/s,平均读取是420k byte/s. SPI应该不会间隔那个么长,你怎么10M才420k
luminary的spi控制器就是间隔2个spi周期
http://cache.amobbs.com/bbs_upload782111/files_22/ourdev_503183.jpg
(原文件名:示波器图片1.jpg) 看看我的波形
1为SPI数据口,2为SPI时钟
http://cache.amobbs.com/bbs_upload782111/files_22/ourdev_505022.JPG
(原文件名:新建文件6.JPG) 我用的FPGA还是4线的SD模式读,也才10Mbit/s不到..............25MHz的时钟。今天太晚了,明天我发图。 mark 发现一个BUG, 有些SD卡误识别为SDHC,需要添加CMD9读16个SD,然后再判断
批量读请用CMD18 请问楼主你读SD卡的速度达到420K BYTE/S,是带文件系统么?我用FATFS读1M的文件需要10s,速度提高不上了。SPI时钟有14M。 不带系统跑420@16mhz, 带FATFS的,跑10MB大概29-30秒,约300KB/S@15MHZ 如果上16MHZ就出现错误了..... SPI模式不可能达到很高的速度.CLASS 6的卡,如果使用SD模式的话,速度会快很多. mark 回复【楼主位】90999 张耀扬
我发现 sdhc 只用3个命令就可以完成初始化~~~~~~~~
(1)cmd0---->00 --->(2)cmd8--->01 --->(3)cmd1 --->00
|sdhc=1
|
---->05
sdhc=0
sdhc只是区别是高速卡还是低速卡,高速卡的时候,cmd16等读写扇区命令是直接输入扇区号码,低速卡时候输入的是扇区号*512
好简单吧~~~~~~~
代码就不用贴了,目前测试sd,mmc卡基本都过了,sdhc卡仅测试了apacer 16g 和kingstone 8g 以及sandisk的4g ~~~~~
-----------------------------------------------------------------------
小弟正在做SDHC卡,新手,能不能发个程序,我用的是SANDISK 4G的卡 mark mark mark SD卡速度 记号 回复【34楼】wenming老王
spi模式不可能达到很高的速度.class 6的卡,如果使用sd模式的话,速度会快很多.
-----------------------------------------------------------------------
对,官方文档说了,SPI模式的话无视Class等级,只能当class0来用 OGM 期待源代码,换了批卡是高速的以前的程序需要重写 问一下,一个扇区读写6ms,这个6ms是怎样测量的,要用什么工具? 回复【43楼】xiachucheng
问一下,一个扇区读写6ms,这个6ms是怎样测量的,要用什么工具?
-----------------------------------------------------------------------
IO口输出啊,一个数字示波器
写过SD卡驱动的,就知道CMD0,CMD1,CMD8,CMD9,CMD17,CMD28.........
所以不要问代码,随便找个代码来改改就可以了。 我也在做SDHC 模式,CM0但是我时钟频率 不敢太高,如果太高,就算在初始化中1000次写CM0,也返回的是255的值,在弱弱问下SD 卡的CM0返回的是01 , 而SDHC的CM0返回的是00。。。。
./emotion/em046.gif 我也在做SDHC 模式,CM0但是我时钟频率 不敢太高,如果太高,就算在初始化中1000次写CM0,也返回的是255的值,在弱弱问下为什么SD 卡的CM0返回的是01 , 而SDHC的CM0返回的是00。。。。 谢谢了 反正初始化成功也是3个,和你不一样就是了 学习,MARK 对于SDIO也可以这样操作么?
页:
[1]