lf415744311 发表于 2012-1-25 22:15:59

求助:STC12C5A60S2+SD+znFAT不能打开文件原因

SD卡初始化是可以的,也能进行扇区的读写测试但执行到znFAT的znFAT_Open_File(&FileInfo,"\\*.*",n,1)就没有回应了????

例如下:
#include "uart.h"
#include "znFAT.h"
#include "STC12C5A60S2.h"
#include "sdx.h"

/**************************************************************

+---------------------------------------------------------+
|振南电子 高级外设测试 之打开SD卡根目录下test.txt文件 |
+---------------------------------------------------------+

此源码版权属 振南 全权享有,如欲引用,敬请署名并告知
      严禁随意用于商业目的,违者必究,后果自负
         振南电子
             ->产品网站 http://www.znmcu.cn/
             ->产品网店 http://shop.znmcu.cn/
             ->产品咨询 QQ :987582714
                                    MSN:yzn07@126.com
                            WW :yzn07
程序说明:本程序调用znFAT的打开文件函数,打开SD卡根目录下的
            test.txt文件。
注:SD卡相关教程请参见
   《振南的疯狂单片机(51)》高级外围篇 之 《SD卡【II】》                                  
**************************************************************/
///////////////////
#define ADDR 78       //要操作的SD卡的扇区地址

sbit LED=P1^3; //如果测试成功,此IO上连接的二极管被点亮

unsigned char xdata pbuf; //数据缓冲区
////////////////////
void test(void);
unsigned char Dev_No; //设备号
struct znFAT_Init_Arg *pArg; //用于指针文件系统参数集合的指针

struct znFAT_Init_Arg Init_Arg_SDCARD; //文件系统参数集合,用于记录文件系统的重要参数
struct FileInfoStruct FileInfo;        //文件参数集合

void main()
{
    P1M1=0x40;                //1000000
    P1M0=0xB0;                //之前B0现改A0P1.7P1.5P1.4强推挽 10110000

UART_Init(); //串口初始化
    UART_Send_Str("串口初始化成功\n");          //从串口输出文件参数信息
znFAT_Device_Init(); //存储设备初始化

    UART_Send_Str("存储设备初始化成功\n");       
pArg=&Init_Arg_SDCARD;        //指针指向SD卡文件系统参数集合,znFAT将从这个集合中获取参数
Dev_No=SDCARD;        //设备号为SDCARD,znFAT依照此设备号选择存储设备驱动
   UART_Send_Str("读取信息中请稍后\n");          //从串口输出文件参数信息
znFAT_Init(); //文件系统初始化
UART_Put_Inf("总存储容量:(字节)",pArg->Total_Size);        //从串口输出各种参数信息
UART_Put_Inf("每扇区字节:(个)",pArg->BytesPerSector);
UART_Put_Inf("每簇扇区:(个)",pArg->SectorsPerClust);
//////////////
test(); //读写测试
////////////////////
if(!znFAT_Open_File(&FileInfo,"\\*.*",0,1)) //打开\test.txt
{
UART_Send_Str("打开文件成功\n");          //从串口输出文件参数信息
UART_Send_Str("文件名为:");
UART_Send_Str(FileInfo.FileName);
UART_Send_Enter();
UART_Put_Inf("文件大小(字节):",FileInfo.FileSize);
UART_Put_Inf("文件当前偏移量(字节):",FileInfo.FileCurOffset);

UART_Send_Str("文件创建时间:\n");
UART_Put_Num(FileInfo.FileCreateDate.year);UART_Send_Str("年");
UART_Put_Num(FileInfo.FileCreateDate.month);UART_Send_Str("月");
UART_Put_Num(FileInfo.FileCreateDate.day);UART_Send_Str("日");
UART_Put_Num(FileInfo.FileCreateTime.hour);UART_Send_Str("时");
UART_Put_Num(FileInfo.FileCreateTime.min);UART_Send_Str("分");
UART_Put_Num(FileInfo.FileCreateTime.sec);UART_Send_Str("秒");
UART_Send_Enter();

}
else
{
UART_Send_Str("打开文件失败\n");
}
}

void test()        //读写测试
{
int i=0;
unsigned char flag=0;
for(i=0;i<512;i++)
pbuf=i;           //向数据缓冲区中写入0~255 0~255,共512个字节
UART_Send_Str("向缓冲区中装入完毕\r\n");

SD_Write_Sector(ADDR,pbuf);//将数据缓冲区中的512个字节的数据写入SD卡的第ADDR扇区中
UART_Send_Str("写 SD卡扇区完毕\r\n");

for(i=0;i<512;i++) //清空数据缓冲区
pbuf=0;
UART_Send_Str("清空缓冲区完毕\r\n");

SD_Read_Sector(ADDR,pbuf);//从SD卡的第ADDR扇区中读取512个字节的数据到数据缓冲区
UART_Send_Str("读 SD卡扇区完毕\r\n");

for(i=0;i<512;i++)
{
if(((unsigned char)i)!=pbuf)//对读出的数据进行匹配,如果不吻合则flag=1,否则flag=0
{
   flag=1;
   break;
}
}
UART_Send_Str("匹配完毕\r\n");

if(flag)
{
// LED=1; //发光二极管灭
UART_Send_Str("SD卡扇区读写测试失败!\r\n"); //数据不吻合
}
else
{
// LED=0; //发光二极管点亮
UART_Send_Str("SD卡扇区读写测试成功!\r\n"); //数据吻合
}
while(1);
}

hero245 发表于 2012-1-25 23:34:55

哈哈,我昨天也正好做了这个测试,到创建文件时就不正常了。不能创建文件。

myemcu 发表于 2012-1-26 02:56:24

为嘛不用FatFS?

madswan 发表于 2012-1-26 15:36:24

mark。。。

yanjian1 发表于 2012-1-26 16:33:55

我用那个完全测试的那个程序,
就是类似dos操作的那个.
没有问题.

另外请问楼上兄弟:fatfs在51下能跑起来吗?

lf415744311 发表于 2012-1-26 16:45:18

回复【1楼】hero245
哈哈,我昨天也正好做了这个测试,到创建文件时就不正常了。不能创建文件。
-----------------------------------------------------------------------

期待你的成功资料!!

renpeng009 发表于 2012-1-26 18:24:51

回复【4楼】yanjian1
另外请问楼上兄弟:fatfs在51下能跑起来吗?
-----------------------------------------------------------------------

有Petit FatFs,专用于小RAM单片机。
本人已测试,很好用,仅需极低RAM即可。

mofan2 发表于 2012-2-22 00:43:40

回复【楼主位】lf415744311
-----------------------------------------------------------------------

这个问题 有可能原因非常的简单, 你的SD卡不是fat32文件系统而是FAT文件系统

把SD卡格式化了,格式化成FAT32文件系统就OK了呵呵 ,当然还有可能是其他原因,但是 程序死在那里,多半是这个原因

q405228062 发表于 2012-8-15 13:02:21

mofan2 发表于 2012-2-22 00:43 static/image/common/back.gif
回复【楼主位】lf415744311
-----------------------------------------------------------------------
...

非常感谢我就是这种情况

ganhui1300 发表于 2012-9-26 07:54:33

我的读很正常,新建文件出问题,在板子上新建都ok,就是电脑识别不了,用winhex看也没有看到。创建文件失败啊!
页: [1]
查看完整版本: 求助:STC12C5A60S2+SD+znFAT不能打开文件原因