MyFPGA Forum
标题:
SD,初步读写成功!大家分享!!当然了SD模式
[打印本页]
作者:
jiayanfu
时间:
2010-5-18 08:22
标题:
SD,初步读写成功!大家分享!!当然了SD模式
今天一来实验室,按照时序又走了一遍,一不小心,成功了,我内心的喜悦不知道该如何表达,只能是和大家共享来分享这一刻的心情。见代码(并参考注释):
//-------------------------SD_write_lba----------------------------------------
///////////利用CRC-----CCITT ---16校验码
BYTE SD_write_block(alt_u16 block_number, BYTE *buff)
{
UINT16 b = 0;
UINT16 crc=0;
BYTE temp = 0;
BYTE crc_status = 0;
///////////修改数据方式为out方式,即写方式。
SD_DAT_OUT;
UINT32 i,k,lba;
lba = block_number * 512;
Ncc();
cmd_buffer[0] = cmd24[0];
cmd_buffer[1] = (lba>>24)&0xff;
cmd_buffer[2] = (lba>>16)&0xff;
cmd_buffer[3] = (lba>>8)&0xff;
cmd_buffer[4] = lba&0xff;
send_cmd(cmd_buffer);
Ncr();
if(response_R(1)>1)
return 1;
Ncc();
////////////S bit
SD_CLK_LOW;
SD_DAT_LOW;
SD_CLK_HIGH;
/////////////content
for(i=0; i < 512; i++)
{
temp = buff [ i ];
for(k=0x80; k!=0; k=k>>1)
{
SD_CLK_LOW;
if(temp&k)
SD_DAT_HIGH;
else
SD_DAT_LOW;
SD_CLK_HIGH;
b = b*2;
if((b&0x10000))
b = b^0x11021;
if((temp&k))
b = b^(0x10000^0x11021);
}
}
crc = b;
// crc =((crc<<1)|0x01); //////////////end bit
////////////crc
for(i=0; i<16; i++)
{
SD_CLK_LOW;
if(crc&0x8000)
SD_DAT_HIGH;
else
SD_DAT_LOW;
SD_CLK_HIGH;
crc<<=1;
}
////////////////////////////////end bit
SD_CLK_LOW;
SD_DAT_HIGH;
SD_CLK_HIGH;
Ncc();
SD_DAT_IN; //////////读取CRC status,应当修改DAT的方向。
while(1) ////////////等待crc status Start 位
{
SD_CLK_LOW;
SD_CLK_HIGH;
if((SD_TEST_DAT & 0x01) == 0)
break;
}
for(i=0;i<8;i++)
{
SD_CLK_LOW;
SD_CLK_HIGH;
crc_status <<= 1;
if((SD_TEST_DAT & 0x01))
crc_status |= 0x01;
}
for(i=0;i<16;i++)
{
SD_CLK_LOW;
SD_CLK_HIGH;
}
write_status = 1;
return 0;
}
//-------------------------------------------------------------------------
作者:
jiayanfu
时间:
2010-5-18 08:25
兄弟们,握起手来,打破SPI网上成功实例的垄断。其他部分和友晶提供的代码没有改变。
主函数如下:
#include "basic_io.h"
#include "LCD.h"
#include "SD_Card.h"
#include <math.h>
int main(void)
{
UINT16 block_num = 1233;
BYTE Buf_write[512]={0,1,2,3,4,5,6,7,8,9,10,11,12,23};
BYTE Buf_read[513]={0};
while(SD_card_init())
usleep(500000);
while(1)
{
SD_write_block(block_num,Buf_write);
SD_read_block(block_num,Buf_read);
block_num++;
}
}
大家验证一下,调试一下,看看效果如何?
作者:
Steady_Chou
时间:
2010-5-18 08:49
恭喜成功了阿
感謝分享 ~~
作者:
jiayanfu
时间:
2010-5-18 09:05
目前只是一条数据线,速度可能还不行。。。期望wide方式
作者:
withoutwing
时间:
2010-5-18 16:03
一起努力吧。
作者:
xlbian
时间:
2010-5-18 20:54
呵呵,好事多磨!
作者:
Pocahontas
时间:
2010-5-19 17:57
我們一起加油
作者:
luhuizszw
时间:
2010-6-1 14:34
哇 我需要的 谢楼主分享了
作者:
huijingjing
时间:
2010-6-11 10:50
感谢分享!!!
作者:
363436899
时间:
2010-6-25 13:25
兄弟你太好了 爱死你了
作者:
REN
时间:
2010-6-26 22:14
回复
2#
jiayanfu
照了進行了 NIOS Console 卻沒有動作.. SD卡也沒有東西? 不知道是哪邊出了錯. 望版主指教..
作者:
w_m
时间:
2010-7-3 15:02
版主啊,可否给个SDCARD读与写的程序呀,上面的我照进行了,可是主函数提示有错误。谢谢啊
作者:
liusw0003
时间:
2010-7-14 22:05
楼主:你的程序我测试了,在DE0上没跑通~~
提出2点建议:
1。
SD_write_block(block_num,Buf_write);
[color=Red ]memset(Buf_read,0,block_num); //加上这句看还能不能读出数据
SD_read_block(block_num,Buf_read);
2. CRC16效验输出为0
本人QQ :1050504518
欢迎交流
作者:
WPZAC
时间:
2010-7-17 21:14
回复
13#
liusw0003
请问你是做什么的?交流下。
作者:
WPZAC
时间:
2010-7-18 10:21
回复
2#
jiayanfu
请问,在NIOS里面如何验证呢?????谢谢。
作者:
withoutwing
时间:
2010-7-18 20:02
回复
15#
WPZAC
你可以写一个数组的数据,然后读出来,做printf显示。看与写入的是否一致。
作者:
IamDavid
时间:
2010-7-21 10:23
感谢分享...嘿嘿...这份喜悦...
作者:
wushicu
时间:
2010-7-21 16:02
兄台!~偶看你的程序还是有点问题。在发送数据的部分:temp没有移位,temp<<=1;
作者:
wushicu
时间:
2010-7-21 16:07
兄台!~偶看你的程序还是有点问题。在发送数据的部分:temp没有移位,temp
wushicu 发表于 2010-7-21 16:02
偶错了,看错了,!~你是在k移位。不过那个crc校验码生成的算法我就看不太懂 了!~~
作者:
wushicu
时间:
2010-7-21 19:03
兄弟!~~我用你的程序怎么还是写不进去啊!~??crc status = 111~~~这问题怎么解决啊???急死我了!~~邮箱或QQ:
303402882@qq.com
作者:
wushicu
时间:
2010-7-23 18:49
兄台!~~~我刚验证了,你的校验码输出是错误的!~~当输入数据为512个 ff 时。crc16的校验码应该为:7fa1。而你的程序输出校验码是 : f01f 。
但是我的程序虽然校验码输出是正确的,但是还是没写进去。时序也没有问题。。。。。
我真是快疯了。
作者:
wushicu
时间:
2010-7-23 18:53
兄台!~~~我刚验证了,你的校验码输出是错误的!~~当输入数据为512个 ff 时。crc16的校验码应该为:7fa1。而你的程序输出校验码是 : f01f 。
但是我的程序虽然校验码输出是正确的,但是还是没写进去。时序也没有问题。。。。。
我真是快疯了。
作者:
zhuhuan0000
时间:
2010-8-20 14:32
楼主你好,我在用DE0做图像采集,现在想将RGB转换成bmp图片存储于SD卡中,能不能分享一下你的SD卡驱动程序,我QQ:1244673032,
作者:
zhuhuan0000
时间:
2010-8-21 10:52
楼主您好,可不可以将您完整的写工程发给我看看,我邮箱:
1244673032@qq.com
作者:
yuanhuayong
时间:
2010-8-21 11:34
楼主贴下工程
作者:
zhuhuan0000
时间:
2010-8-21 15:14
楼主啊,你是怎么做的,分享下,我QQ:1244673032
作者:
kvm
时间:
2010-10-15 11:41
ALtera 不是有 SPI IP 嗎?怎麼會用i/o模式?
作者:
hattrick110
时间:
2011-3-4 18:28
你好,用你的方法在de2-70试了下,但是将写进去的又读出来时错误,读出为0 1 56 150.。。。,不知为何,求解。email:
hat_trick@126.com
作者:
ITRIHCI
时间:
2011-6-23 13:35
unsigned char abc[512]="TED TED This is a successful test...";
SD_write_block(568,abc);
SD_write_block(569,abc);
SD_write_block(570,abc);
复制代码
但這樣 只有 第一個 SD_write_block(568,abc); 有真正的把值寫進去。
發現在 SD_write_block 裡面
response_R 裡,等不到 SD_TEST_CMD 。
不知是否有其他大大 成功的嗎?
作者:
daxiadian
时间:
2012-3-17 23:40
呵呵,我做了一个4线的SD模式的读取,需要的可以联系
332400178@qq.com
作者:
yyangkkaiffeng
时间:
2012-8-5 23:25
我个晕,你的cmd里面的校验码呢?校验码都没有,你就向外发嘛?
欢迎光临 MyFPGA Forum (http://www.myfpga.org/discuz/)
Powered by Discuz! X3