4219|5

83

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

430读写SD卡问题 [复制链接]

用了Ti读写SD 卡例子,但是URCTL总是为0X20,而且sd发出都是高电平,没有其他响应,不知什么原因,谢谢大家了

最新回复

TI的例程并非都可以 我发现了4处有问题的地方 大家可要小心啊!! 真的 包括SD卡  详情 回复 发表于 2007-1-20 09:55
 
点赞 关注

回复
举报

76

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
所有时序都要模拟,所以在编写代码时必须参考资料上的时序操作图
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
困惑啊,还是不行,ti的程序我已经仔细查了,时序应该没问题啊,UCLK=320K了,发命令后响应就是不对,示波器就看不到有低电平的产生,版主帮帮忙吧,谢谢了
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

4
 
void initSPI (void)
{
UCTL0 = SWRST; // 8-bit SPI Master **SWRST**
UTCTL0 = CKPH | SSEL1 | SSEL0 | STC; // SMCLK, 3-pin mode, clock idle low, data valid on rising edge, UCLK delayed
UBR00 = 0x20; // 0x02: UCLK/32 (250KMHz), works also with 3 and 4
UBR10 = 0x00; // -"-
UMCTL0 = 0x00; // no modulation
UCTL0 = CHAR | SYNC | MM | SWRST; // 8-bit SPI Master **SWRST**
UCTL0 &= ~SWRST; // clear SWRST
ME1 |= USPIE0; // Ena××e USART1 SPI mode
while (!(IFG1 & UTXIFG0)); // USART1 TX buffer ready (empty)?
}


// Initialize MMC card
char initMMC (void)
{

//raise SS and MOSI for 80 clock cycles
//SendByte(0xff) 10 times with SS high
//RAISE SS
int i;

// Port 3 Function Dir On/Off
// 3.0-mmcCD Out 0 - card inserted
// 3.1-Dout Out 0 - off 1 - On -> init in SPI_Init
// 3.2-Din Inp 0 - off 1 - On -> init in SPI_Init
// 3.3-Clk Out - -> init in SPI_Init
// 2.6-mmcCS Out 0 - Active 1 - none Active

P2DIR |= BIT6;
P3SEL |= 0x0E;
P3SEL &= ~0x11;
P3OUT |= 0x10;
P3DIR |= 0x0A;

initSPI();
//initialization sequence on PowerUp
CS_LOW();
for(i=0;i<10;i++)
spiSendByte(0xff);
CS_HIGH();
for(i=0;i<=9;i++)
spiSendByte(0xff);

return (mmc_GoIdle());
}


char mmc_GoIdle(void)
{
char response=0x01;
CS_LOW();

//Send Command 0 to put MMC in SPI mode
mmcSendCmd(MMC_GO_IDLE_STATE,0,0x95);
//Now wait for READY RESPONSE
if(mmcGetResponse()!=0x00)//
return MMC_INIT_ERROR;

while(response==0x00)
{
CS_HIGH();
spiSendByte(0xff);
CS_LOW();
mmcSendCmd(MMC_SEND_OP_COND,0x00,0xff);
response=mmcGetResponse();
}
CS_HIGH();
spiSendByte(0xff);
return (MMC_SUCCESS);
}

// mmc Get Responce
char mmcGetResponse(void)
{
//Response comes 1-8bytes after command
//the first bit will be a 0
//followed by an error code
//data will be 0xff until response
int i=0;

char response;

while(i<=64)
{
response=spiSendByte(0xff);
if(response==0x00)break;
if(response==0x01)break;
i++;
}
return response;
}
问题就出现在红字表示的语句上
我用示波器看了,结果并不是没有响应,有响应R1,只是在执行这个函数mmcGetResponse()之前,响应已经给过了。也就是说,在命令和响应有个时间间隔N(CR),这个间隔很短,以至于还没等到我执行接受响应语句,响应就已经发完了,真FT。
可是我还是不明白,我的MCLK为8M,而我的SPI的CLOCK仅为250K,按SD卡的技术文档命令和响应时间间隔N(CR)为0~8个时钟个数,单位为8个Clock周期。我认为单位为8个SPI的Clock周期,也就是0~64个SPI的Clock周期。这样算来,执行语句的速度怎么也应该能收到响应吧!
困惑中,版主提供点高见
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

5
 
路过的,进来帮帮忙啊,小弟谢谢了
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

6
 
TI的例程并非都可以
我发现了4处有问题的地方

大家可要小心啊!!
真的

包括SD卡
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表