下载的就是TXT格式的 sd卡是不是内存卡里面没有SD卡的原因呀

查看: 59844|回复: 94
arduino学习笔记18 - SD卡读写实验
本次实验使用arduino驱动SD卡,在SD卡中进行文件读写。
需要说明的是arduino的SD库文件,目前对2G以上的卡支持不是很好,所以推荐大家使用2G包含2G以下的,文件格式使用FAT格式。
这次我是用的是kingmax2G的MicroSD卡。
IMGP0671_调整大小.JPG (188.99 KB, 下载次数: 235)
13:38 上传
先看一下硬件连接图
Snap1.jpg (108.41 KB, 下载次数: 197)
13:38 上传
IMGP0685_调整大小.JPG (184.05 KB, 下载次数: 173)
22:43 上传
把下面代码下载进arduino控制板/*
此例子展示如果记录三个模拟引脚数值到SD卡,使用SD库。
&&& & & &
* 模拟引脚使用模拟口0,1,2大家可以根据情况接入模拟传感器,
& &如果没有,也可以完成此实验,只不过数值是不停跳动的干扰源。
* SD卡与arduino控制板使用SPI总线连接
** MOSI - pin 11
** MISO - pin 12
** CLK - pin 13
** CS - pin 4
#include &SD.h&
// CS引脚为pin4,这里也沿用官方默认设置
const int chipSelect = 4;&&//设定CS接口
void setup()
{
&&Serial.begin(9600);&&//设置串口通信波特率为9600
&&Serial.print(&Initializing SD card...&);&&//串口输出数据Initializing SD card...
&&pinMode(10, OUTPUT);
&&
&&
&&if (!SD.begin(chipSelect)) {&&//如果从CS口与SD卡通信失败,串口输出信息Card failed, or not present
& & Serial.println(&Card failed, or not present&);
& &
&&}
&&Serial.println(&card initialized.&);&&//与SD卡通信成功,串口输出信息card initialized.
}
void loop()
{
&&// 定义数组
&&String dataString = &&;
&&// 读取三个传感器值,写入数组
&&for (int analogPin = 0; analogPin & 3; analogPin++) {
& & int sensor = analogRead(analogPin);
& & dataString += String(sensor);
& & if (analogPin & 2) {
& && &dataString += &,&;
&&// 打开文件,注意在同一时间只能有一个文件被打开
&&// 如果你要打开另一个文件,就需要先关闭前一个
&&File dataFile = SD.open(&datalog.txt&, FILE_WRITE);&&
&&// 打开datalog.txt文件,读写状态,位置在文件末尾。
&&if (dataFile) {
& & dataFile.println(dataString);
& & dataFile.close();
& & // 数组dataString输出到串口
& & Serial.println(dataString);
&&}&&
&&// 如果无法打开文件,串口输出错误信息error opening datalog.txt
&&else {
& & Serial.println(&error opening datalog.txt&);
&&}
}复制代码下载完成后,打开串口监视器。
Snap6.jpg (39.92 KB, 下载次数: 172)
13:38 上传
控制板开始工作后会看到如下画面,图中每一行上就是每次记录的三个传感器数值,本次实验并没有接传感器,所以数值是周围干扰源的杂乱信号。
Snap2.jpg (32.63 KB, 下载次数: 157)
13:38 上传
关闭arduino电源后把SD卡取出,接入电脑后,可以看到SD卡中有一个DATALOG.TXT文件,打开后有可以看到,此文件中的信息就是记录下的各个传感器的数值。
Snap3.jpg (59.7 KB, 下载次数: 162)
13:38 上传
第一个代码实验完以后,SD卡中的DATALOG.TXT不要删除,把下面代码下载进arduino中,打开串口监视器,看看效果。/*
这个例子展示如何通过SD库从SD卡中读取一个文件,并且把数据通过串口发送。
* SD卡与arduino控制板使用SPI总线连接
** MOSI - pin 11
** MISO - pin 12
** CLK - pin 13
** CS - pin 4
#include &SD.h&
// CS引脚为pin4,这里也沿用官方默认设置
const int chipSelect = 4;&&//设定CS接口
void setup()
{
&&Serial.begin(9600);&&//设置串口通信波特率为9600
&&Serial.print(&Initializing SD card...&);&&//串口输出数据Initializing SD card...
&&pinMode(10, OUTPUT);
&&
&&if (!SD.begin(chipSelect)) {&&//如果从CS口与SD卡通信失败,串口输出信息Card failed, or not present
& & Serial.println(&Card failed, or not present&);
& & // don't do anything more:
& &
&&}
&&Serial.println(&card initialized.&);&&//与SD卡通信成功,串口输出信息card initialized.
&&
&&File dataFile = SD.open(&datalog.txt&);&&//打开datalog.txt文件
&&if (dataFile) {
& & while (dataFile.available()) {&&//检查是否dataFile是否有数据
& && &Serial.write(dataFile.read());&&//如果有数据则把数据发送到串口
& & }
& & dataFile.close();&&//关闭dataFile
&&}&&
&&
&&else {
& & Serial.println(&error opening datalog.txt&);&&//如果文件无法打开串口发送信息error opening datalog.txt
&&}
void loop()
{
}复制代码可以看到,DATALOG.TXT文件中的数据都通过串口发送回了电脑。效果如下图:
Snap4.jpg (35.19 KB, 下载次数: 156)
13:38 上传
再把下面的代码下载进arduino控制板中,打开串口监控器看看效果。/*
此例子展示如何在SD卡中创建于删除文件
* SD卡与arduino控制板使用SPI总线连接
** MOSI - pin 11
** MISO - pin 12
** CLK - pin 13
** CS - pin 4
*/
#include &SD.h&
void setup()
{
&&Serial.begin(9600);&&//设置串口通信波特率为9600
&&Serial.print(&Initializing SD card...&);&&//串口输出数据Initializing SD card...
&&pinMode(10, OUTPUT);
&&if (!SD.begin(4)) {&&//如果从CS口与SD卡通信失败,串口输出信息initialization failed!
& & Serial.println(&initialization failed!&);
& &
&&}
&&Serial.println(&initialization done.&);&&//CS口与SD卡通信成功,串口输出信息initialization done.
&&if (SD.exists(&example.txt&)) {&&//检查example.txt文件是否存在
& & Serial.println(&example.txt exists.&);&&//如果存在输出信息example.txt exists.至串口
&&}
&&else {
& & Serial.println(&example.txt doesn't exist.&);&&//不存在输出信息example.txt doesn't exist.至串口
&&}
&&Serial.println(&Creating example.txt...&);
&&myFile = SD.open(&example.txt&, FILE_WRITE);&&//打开example.txt,如果没有自动创建,写入状态
&&myFile.close();&&//关闭文件
&&if (SD.exists(&example.txt&)) {
& & Serial.println(&example.txt exists.&);
&&}
&&else {
& & Serial.println(&example.txt doesn't exist.&);&&
&&}
&&Serial.println(&Removing example.txt...&);
&&SD.remove(&example.txt&);&&//删除文件example.txt
&&if (SD.exists(&example.txt&)){
& & Serial.println(&example.txt exists.&);
&&}
&&else {
& & Serial.println(&example.txt doesn't exist.&);&&
&&}
}
void loop()
{
}复制代码下面图就是串口监视器显示的结果,显示文件创建于删除的过程。
Snap5.jpg (30.01 KB, 下载次数: 167)
13:38 上传
再把下面的代码传入arduino控制板,看看效果#include &SD.h&
void setup()
{
&&Serial.begin(9600);
&&Serial.print(&Initializing SD card...&);
& &pinMode(10, OUTPUT);
& &
&&if (!SD.begin(4)) {
& & Serial.println(&initialization failed!&);
& &
&&}
&&Serial.println(&initialization done.&);
&&
&&myFile = SD.open(&test.txt&, FILE_WRITE);
&&
&&if (myFile) {
& & Serial.print(&Writing to test.txt...&);
& & myFile.println(&testing 1, 2, 3.&);
& & myFile.close();
& & Serial.println(&done.&);
&&} else {
& & Serial.println(&error opening test.txt&);
&&}
&&
&&myFile = SD.open(&test.txt&);
&&if (myFile) {
& & Serial.println(&test.txt:&);
& &
& & while (myFile.available()) {
& & & & & & Serial.write(myFile.read());
& & }
& & myFile.close();
&&} else {
& & Serial.println(&error opening test.txt&);
&&}
}
void loop()
{
}复制代码串口监视器中可以看到如下画面
Snap7.jpg (27.02 KB, 下载次数: 165)
13:38 上传
把SD卡接入电脑,可以在里面找到TEST.TXT文件,里面的内容如下。
Snap8.jpg (28.15 KB, 下载次数: 167)
13:38 上传
我的256MB microSD卡不认
davidce 发表于
我的256MB microSD卡不认
理论上256的应该更好识别才是。。。会不会是卡片和读卡器硬件兼容不太好。。。。理论上256使用FAT应该没问题ing~~~~
1G的SD大卡可以,microSD 不识别,现在一直用的大卡。
非常感谢群里大侠们的无私奉献精神,让小弟受教了。
2G以上的卡可以使用,需要对超过2G的空间进行分区,使每个分区不大于2G,原因是FAT16只能支持到2G的分区空间,另外如果单独使用SD卡的情况,可以将SD模块的sc脚接到P10,P4脚空出不使用,代码中去除第9行 pinMode(10, OUTPUT);修改第11行 if (!SD.begin(10)) { 即可使用。
绝对是好东西呀,顶一个
请问一下如果每次保存的数据都要覆盖上一次的如果操作呢?
davidce 发表于
2G以上的卡可以使用,需要对超过2G的空间进行分区,使每个分区不大于2G,原因是FAT16只能支持到2G的分区空间 ...
FAT32能显示4G的好像。
Randy 发表于
FAT32能显示4G的好像。
这个模块的类库只能支持FAT16
Powered by(蘑菇夭夭)
(蘑菇夭夭)
第三方登录:看了一下uboot的的文件系统支持,支持挺多的,ext,fat 都支持,但是fat 我看只是支持从fat 区域读写一个文件,但是文件内部的一些字符串好像没有,
我们应该怎么完善它呢?
& &这个估计要好好看看文件系统了,才知道怎么搞。
有搞过的提醒一下。
在线时间104 小时
威望1952分
芯币4209枚
TA的帖子TA的资源
纯净的硅(高级), 积分 1952, 距离下一级还需 48 积分
纯净的硅(高级), 积分 1952, 距离下一级还需 48 积分
ext 指的ext2/ext3 之类的。
在线时间104 小时
威望1952分
芯币4209枚
TA的帖子TA的资源
纯净的硅(高级), 积分 1952, 距离下一级还需 48 积分
纯净的硅(高级), 积分 1952, 距离下一级还需 48 积分
在偶的技术交流群一个,一个老兄,让我看
看u-boot/common/env_*.c 这个参考一下,明天看吧。嘿嘿!
在线时间104 小时
威望1952分
芯币4209枚
TA的帖子TA的资源
纯净的硅(高级), 积分 1952, 距离下一级还需 48 积分
纯净的硅(高级), 积分 1952, 距离下一级还需 48 积分
TI的uENV.txt 这个方式值得参考一下!
你的问题解决了?还想帮你问问网友呢,嘿嘿&
在线时间738 小时
威望1326分
TA的帖子TA的资源
纯净的硅(高级), 积分 1326, 距离下一级还需 674 积分
纯净的硅(高级), 积分 1326, 距离下一级还需 674 积分
回复 4楼 gooogleman 的帖子
你的问题解决了?还想帮你问问网友呢,嘿嘿
没解决,只是网友提供一个参考,是否能实现还是未知数,现在要先发布基础功能的修改版本先,这是完善的工作。&
在线时间104 小时
威望1952分
芯币4209枚
TA的帖子TA的资源
纯净的硅(高级), 积分 1952, 距离下一级还需 48 积分
纯净的硅(高级), 积分 1952, 距离下一级还需 48 积分
回复 5楼 苏莎莎 的帖子
没解决,只是网友提供一个参考,是否能实现还是未知数,现在要先发布基础功能的修改版本先,这是完善的工作。
在线时间134 小时
威望1093分
芯币4551枚
E金币100枚
TA的帖子TA的资源
纯净的硅(中级), 积分 1093, 距离下一级还需 107 积分
纯净的硅(中级), 积分 1093, 距离下一级还需 107 积分
在线时间130 小时
威望3732分
芯币3748枚
TA的帖子TA的资源
五彩晶圆(中级), 积分 3732, 距离下一级还需 2268 积分
五彩晶圆(中级), 积分 3732, 距离下一级还需 2268 积分
这个方法行不通,即使能行通,这个也是非常不好的方式。
在线时间1 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 10, 距离下一级还需 190 积分
一粒金砂(中级), 积分 10, 距离下一级还需 190 积分
楼主你好,关于你之前提出的那个问题,目前是否有解决方法了?我这边也有个类似的需求,就是在uboot中读取sd卡里面一个cfg文件的内容(字符串),根据这个内容来做一些操作的判断。如有什么进展能否回复下,非常感谢!
这部分需要完善fat 才行,不过应该也不难,我最近没去研究,估计过阵子再去研究了。&
在线时间130 小时
威望3732分
芯币3748枚
TA的帖子TA的资源
五彩晶圆(中级), 积分 3732, 距离下一级还需 2268 积分
五彩晶圆(中级), 积分 3732, 距离下一级还需 2268 积分
原帖由 oasis_gu 于
08:54 发表
楼主你好,关于你之前提出的那个问题,目前是否有解决方法了?我这边也有个类似的需求,就是在uboot中读取sd卡里面一个cfg文件的内容(字符串),根据这个内容来做一些操作的判断。如有什么进展能否回复下,非常感谢 ... 这部分需要完善fat 才行,不过应该也不难,我最近没去研究,估计过阵子再去研究了。
哦,这样啊,那我也再看看吧,非常感谢!&
如果对linux,Android,wince 等嵌入式底层有兴趣的,请加这个QQ群吧,群号:
在线时间1 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 10, 距离下一级还需 190 积分
一粒金砂(中级), 积分 10, 距离下一级还需 190 积分
回复 10楼Wince.Android 的帖子
哦,这样啊,那我也再看看吧,非常感谢!
有办法了也在帖子里面说一下啊。应该不难的,主要是要研究一下fat 就可以了。&
在线时间130 小时
威望3732分
芯币3748枚
TA的帖子TA的资源
五彩晶圆(中级), 积分 3732, 距离下一级还需 2268 积分
五彩晶圆(中级), 积分 3732, 距离下一级还需 2268 积分
原帖由 oasis_gu 于
11:29 发表
哦,这样啊,那我也再看看吧,非常感谢! 有办法了也在帖子里面说一下啊。应该不难的,主要是要研究一下fat 就可以了。
如果对linux,Android,wince 等嵌入式底层有兴趣的,请加这个QQ群吧,群号:
荣誉会员勋章
曾经的版主且威望大于2000,或对EEWORLD论坛有突出贡献的坛友
EEWORLD 官方微信
Powered by
逛了这许久,何不进去瞧瞧?

参考资料

 

随机推荐