刚Google 一个SD卡和FAT16读写源代码 支持长文件名和子目录,一起测试下.
点击此处下载ourdev_179854.zip(文件大小:217K) 最近在搞FAT文件系统,SD写的时间太慢,SPI写最高有多快(FAT16+SPI <10M). 好的 谢谢 过些时候测试一下 总算有人回啦,初看了一下还不错,昨天我用本网下的一个测了一下,写文件好慢啊.... 对啦小松大虾测了别忘了发个测试情况,我下班后也去测一下. 我还没研究透呢 现在不行啊 最近没时间搞这个 如果也支持FAT32就好了:p 昨晚初测了一下,感觉太酷啦,把测试情况如下:测试条件: M647.3728M9600,8,1,NSPI/128超级终端Kingston512
测试命令: >disk显示磁盘信息可显示磁盘容量和可用空间等信息
>mkdir 建立目录
支持长目录名(我写入中文文件名在超级终端下可显示
但WINXP下是乱码,可能是编码不对写入的是uncode显示GB码)
>cd 进入目录
>ls 显示文件和目录
>touch 创建文件 支持长文件件名
>write 写入文件
写入文件是从串口输入文件的,在上面的条件上从超级终端里输入
信息并写入比较流畅(其实还可提高,满足我的要求)
总结: 程序做了一个类似于DOS的文件和磁盘管理核,在超级终端上使用就像在
DOS环境下.强烈推介给网友(特别对于做MP3的朋友)移植方便.程序
还没完全看懂,好像支持多任务的操作系统(个人理解)是一个很好的读
SD+FAT16的好例程../emotion/em035.gif "支持长目录名(我写入中文文件名在超级终端下可显示
但WINXP下是乱码,可能是编码不对写入的是uncode显示GB码)"
应该是写入GBK码显示unicode,所以乱了。
如果是卡原来就有的长文件名,并且是中文的,那用这个程序也不能正确显示。
如果要做必须有两张表,unicode与gbk的互查表。
我以前做过类似的程序,当时想支持中文的,但是因这个原因算了。 原网站地址好像是这个:http://www.roland-riegel.de/sd-reader/index.html
上面有新的程序。 你这个是什么版本,我怎么没有找到
disk mkdir命令 记号 留个记号,以后再拜读 收藏 我也记号 是个好东西,新版的结构非常的好,真佩服这些人写的代码,我就拿来用在我的电路上了,谢谢了 代码效率如何?我最近在研究TFF(TINY FATFS) 刚才试了一下,我的128上可能有点问题,可以看到目录和文件大小,但是显示不了SD卡的信息,也无法创建文件,明天看看代码,今天休息了
这是个好东西,我收藏了,感谢开源 MARK mark!! 收藏 我已经把上面的文件作了调整了http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=827990&bbs_page_no=3&bbs_id=1000 MARK 看一下 最近在看fat16 收藏 记号 做个记号,要用再来看。 mark 记号 收藏 收藏,记号
结束手头的项目后就开始研究这个SD卡了 收藏一下...
这样的开源不错 略看了下源码,在性能和可扩充性上做得都不错,如chairang所说,稍加改动即可应用在操作系统上以加载多个文件或多个存储介质,比ZLGFATFS好得多(不知道有没有最新版的,至少没看到,呵呵)具体读速度大约是100KB/S(7.3728的频率下),手头只有M16接了SD卡,所以没有实际测试。
M16只有1K内存,性能不好测,要用大点的内存才好,上面的那个数是跟据以前的实验估算来的,应该相差不大。
另外读写速度还依赖于族大小,实际的程序结构等,总知只要不是对速度要求特别苛刻的场合这个代码足够了。
没做过MP3,bozai可以移植下看看啊,放320K的音乐估计没有问题,呵呵 昨天测试了一下 用的M16 可是只有cd 命令和ls命令有效 其他命令都出错 请问 这个是怎么回事呢? 有人测试过吗
我开始以为是搭焊干扰大 所以 把初始化成功后提高spi速度那里屏蔽了 一直用的慢速spi 还是不行
注释掉这里
/* switch to highest SPI frequency possible */
// SPCR &= ~((1 << SPR1) | (1 << SPR0)); /* Clock Frequency: f_OSC / 4 */
// SPSR |= (1 << SPI2X); /* Doubled Clock Frequency: f_OSC / 2 */
还是不行 嗯 大家帮忙 终于调通了 现在可以创建文件夹和文件了
但是write命令和cat命令还是不会用
请用过的兄弟贴几个write命令和cat命令的例子出来 谢谢 一用cat命令或者write命令 单片机就重启 是什么原因呢? 汗一个 嗯 问题已经解决 好东西,谢谢LZ! 学习一下
现在正搞SD卡的Fat系统 这么爽,回家也试试 谢谢 不错,试试! 记号~~~~~~~~~~~ 研究了不少时间,原来按照他的指令倒是没有什么问题,因为我要求的速度不高,也可以使用
在程序中我也加了建立文件等指令,但是我其它要求没有达到,打开文件时,对源代码理解有点混乱
根据我的要求决定增减一些功能
取消长文件名
改成FAT32
主要以下几个功能 建立文件(夹),写文件
包括一直遇到的问题
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=2137349&bbs_page_no=1&search_mode=3&search_text=ee168&bbs_id=9999 typedef uint8_t (*sd_raw_interval_handler) (uint8_t* buffer, uint32_t offset, void* p);
uint8_t sd_raw_read(uint32_t offset, uint8_t* buffer, uint16_t length)
{
//......
}
uint8_t sd_raw_read_interval(uint32_t offset, uint8_t* buffer, uint16_t interval, uint16_t length, sd_raw_interval_handler callback, void* p)
{
//......
if(!sd_raw_read(offset, buffer, interval))
return 0;
if(!callback(buffer, offset, p))
return 0;
//......
}
partition = partition_open(sd_raw_read,
sd_raw_read_interval,
sd_raw_write,0);
typedef uint8_t (*device_read_t)(uint32_t offset, uint8_t* buffer, uint16_t length);
typedef uint8_t (*device_read_callback_t)(uint8_t* buffer, uint32_t offset, void* p);
typedef uint8_t (*device_read_interval_t)(uint32_t offset, uint8_t* buffer, uint16_t interval, uint16_t length, device_read_callback_t callback, void* p);
struct partition_struct* partition_open(device_read_t device_read, device_read_interval_t device_read_interval, device_write_t device_write, uint8_t index)
{
//......
new_partition->device_read_interval = device_read_interval;
//......
}
fs->partition->device_read_interval(arg.entry_offset,
buffer,
sizeof(buffer),
arg.byte_count,
fat16_dir_entry_read_callback,
dir_entry);
本贴被 ee168 编辑过,最后修改时间:2009-01-18,20:48:13. 顶起,也在一直研究,我也是希望建立A.TXT等,然后在里面写数据. 请教一下这个库怎么修改才能支持avr32芯片,比如uc3b,uc3a呢? AVR32有FAT的例程,可以支持FAT32和长文件名的。在AVR32_Studio的SWF里有例子(用了FreeRTOS),可以结合在线帮助熟悉代码,还是很不错的。如果想要根据自己的要求修改功能的话,最好还是看一下微软的FAT白皮书和相关介绍资料,网站上就有很多。 标记 很好~~~~~~ mark mark FAT mark。 记号 remark mark mark 300KB/S我都嫌慢,目标800KB/S ......... MARK MARK MARK DING mark hello world mark! 最新SD卡操作库,支持FAT32ourdev_590461MQBNP2.rar(文件大小:274K) (原文件名:sd-reader_source_20101010.rar)
我用的M16测试,直接接SD卡,已经屏蔽掉写的那部分。可是程序在partition.c文件的partition_open()函数调用device_read()的时候挂起了。。。不知道怎么原因???http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_590463U4ESFX.png
(原文件名:device_open.png) 格式化成FAT16问题解决。好像是FAT32的支持性不是特别好,再看看。。。 汗一个,,,FAT32也支持。等比赛完好好学习学习
#define FAT_FAT32_SUPPORT SD_RAW_SDHC MARK
页:
[1]