×

Arduino的DIY SD卡模块

消耗积分:2 | 格式:zip | 大小:0.03 MB | 2022-07-04

王兰

分享资料个

PCB图如下:
pYYBAGKy-lSAXqdaAABUfd9nfzI009.png
poYBAGKy-laAdSjCAAAuWvQf3qI233.png
pYYBAGKy-liAR64GAACBM1RXc9c791.png

成分

Y16271K00000T9R
Vishay 箔电阻器(Vishay Precision Group 的部门)
× 3
106CKR063M
伊利诺伊电容器
× 3
AMS1117-5 × 1
74LVC1G74DC,125
安世半导体
× 1
SD卡槽 × 1
16针母头 × 2

描述

Arduino的DIY SD卡模块

微型 SD 卡适配器模块

poYBAGKy-meAGG-qAABwJk58iRM074.png

pYYBAGKy-mmAfJ3SAABOvF_Dwoc698.png

pYYBAGKy-muABjV6AADj1HOjFDE027.jpg

微型 SD 卡适配器模块

Micro SD 卡适配器模块引脚分配

SD 卡或 Micro SD 卡广泛用于各种应用,例如数据记录、数据可视化等等。微型 SD 卡适配器模块使我们更容易轻松访问这些 SD 卡。Micro SD 卡适配器模块是一个易于使用的模块,具有 SPI 接口和板载 3.3V 稳压器,可为 SD 卡提供适当的电源。

 

Micro SD 卡适配器模块的特点和规格

本节介绍了 Micro SD 卡适配器模块的一些特性和规格。

工作电压:4.5V - 5.5V DC

电流要求:0.2-200 mA

3.3 V 板载稳压器

支持FAT文件系统

支持高达 2GB 的微型 SD

支持高达 32GB 的 Micro SDHC

Micro SD 卡转接模块的管脚配置

该模块包含 6 个用于电源和与控制器通信的引脚。

下表描述了模块上每个管脚的管脚类型和作用。

GND - 接地

VCC - 电压输入

MISO - 主输入从输出(SPI)

MOSI - 主输出从输入(SPI)

SCK - 串行时钟(SPI)

CS - 片选(SPI)

将 Micro SD 卡适配器模块连接到 MCU/MPU

Micro SD 卡适配器模块可以轻松连接到 MCU/MPU。由于模块通过SPI协议进行通信,我们需要将模块的MISO、MOSI、SCK和CS连接到MCU。

poYBAGKy-m6ANGXnAACZeVE5VAU752.png

该图像可以被视为参考,并且可以基于此进行连接。除了 SD 卡座,该模块还有一个 3.3V 稳压器,以及一个 74LVC125A 电平转换器 IC。

Micro SD 卡适配器模块的替代品

MOD100717 Micro SD 卡模块,Mini Micro SD 读卡器模块

Micro SD卡适配器模块的应用

以下是Micro SD 卡适配器模块的一些应用。

数据记录器

音频、视频存储和可视化

可扩展内存

Micro SD 卡适配器模块的 2D 模型

下面是 SD 卡适配器模块的 2D 模型及其尺寸(以毫米为单位)。此信息可用于创建模块的自定义封装,并可用于 PCB 设计和 CAD 建模。

poYBAGKy-nCASZFiAADiDPQc7_U367.jpg

任何标准 micro SD 卡的工作电压都是 3.3 V。所以我们不能直接将它连接到使用 5V 逻辑的威廉希尔官方网站 。事实上,任何超过 3.6V 的电压都会永久损坏 micro SD 卡。这就是为什么; 该模块具有板载超低压差稳压器,可将电压从 3.3V – 6V 转换为 ~3.3V。

模块上还有一个 74LVC125A 芯片,可将接口逻辑从 3.3V-5V 转换为 3.3V。这称为逻辑电平转换。这意味着您可以使用该板与 Arduino 等 3.3V 和 5V 微控制器进行交互。

准备微型 SD 卡

在将 micro SD 卡插入模块并将其连接到 Arduino 之前,您必须正确格式化卡。对于我们将要讨论的 Arduino 库以及几乎所有其他 SD 库,卡必须格式化为 FAT16 或 FAT32。

如果您有一张新的 SD 卡,很可能它已经使用 FAT 文件系统进行了预格式化。但是,您可能对工厂格式化卡的方式有疑问,或者如果它是旧卡,则需要重新格式化。无论哪种方式,在使用前格式化卡总是个好主意,即使它是新的!

我们强烈建议您使用官方的 SD 卡格式化程序实用程序 - 由 SD 协会编写,它解决了格式化错误带来的许多问题!下载格式化程序并在您的计算机上运行它,只需选择正确的驱动器并单击格式化。

pYYBAGKy-nKAK_X3AAAwBRUAUTQ386.png

接线 - 将 Micro SD 卡模块连接到 Arduino

现在您的卡可以使用了,我们可以连接 micro SD 分线板!

首先,将微型 SD 卡模块插入面包板。将模块上的 VCC 引脚连接到 Arduino 上的 5V 和 GND 引脚接地。现在我们剩下的是用于 SPI 通信的引脚。

由于 micro SD 卡需要大量数据传输,因此当连接到微控制器上的硬件 SPI 引脚时,它们将提供最佳性能。硬件 SPI 引脚比使用另一组引脚对接口代码进行“bit-banging”快得多。

请注意,每个 Arduino 板都有不同的 SPI 引脚,应相应地连接。对于像 UNO/Nano 这样的 Arduino 板,这些引脚是数字 13 (SCK)、12 (MISO) 和 11 (MOSI)。您还需要第四个引脚用于“芯片/从选择”(SS)线。

通常这是引脚 10,但您实际上可以使用任何您喜欢的引脚。

如果您有 Mega,则针脚不同!您需要使用数字 50 (MISO)、51 (MOSI)、52 (SCK) 和 53 (SS)。请参阅下表以快速了解。

Arduino 代码 – 使用 CardInfo 测试 SD 卡模块

与 SD 卡通信是一项繁重的工作,但对我们来说幸运的是,Arduino IDE 已经包含一个非常好的库,称为 SD,它简化了对 SD 卡的读取和写入。您可以在示例子菜单中看到它。

接下来,选择 CardInfo 示例草图。

pYYBAGKy-nSAKebrAAA_DlV8QA8378.png

此草图不会将任何数据写入卡。它只是告诉您它是否成功识别了该卡,并显示有关它的一些信息。这在尝试确定是否支持 SD 卡时非常有用。在尝试任何新卡之前,我们建议您运行此草图一次!

转到草图的开头并确保chipSelect 线已正确初始化,在我们的例子中,我们使用数字引脚#10,因此将其更改为10!

poYBAGKy-naACPtGAAA1yJlEN7g764.png

好的,现在将 SD 卡插入模块并上传草图。

一旦你打开串行监视器,你可能会得到如下内容:

pYYBAGKy-niAGzCqAAArsGCOt2g718.png

你可能会觉得它乱码,但看看卡类型是 SDHC(SD 高容量),卷类型是 FAT32 以及卡的大小大约 4 GB 等很有用。

如果您有一张坏卡,克隆版本似乎更容易发生这种情况,您可能会看到:

poYBAGKy-nqAKKurAAArqyY0cGI983.png

卡大多有反应,但数据全是坏的。请参阅没有制造商 ID/OEM ID 并且产品 ID 为“N/A”。这表明该卡返回了一些 SD 错误。这基本上是一个糟糕的场景。如果你得到这样的东西,你可以尝试重新格式化它,或者如果它仍然剥落,你应该把卡扔掉。

最后,尝试取出 SD 卡并再次运行草图,您将得到以下内容,

pYYBAGKy-nyAUNuNAAAmBBX5iG8631.png

看,它甚至无法初始化 SD 卡。如果存在接线错误或卡永久损坏,也会发生这种情况。

如果接线正确但 SD 卡未正确格式化,您将得到如下信息:

poYBAGKy-n-AFFgbAAAlsIZdp0c062.png

arduino 的 sd 卡代码

#include

#include

归档我的文件;

// 更改它以匹配您的 SD 防护罩或模块;

常量 int 芯片选择 = 10;

无效设置()

{

// 打开串行通信并等待端口打开:

序列号.开始(9600);

而(!串行){

; // 等待串口连接。只需要莱昂纳多

}

Serial.print("正在初始化 SD 卡...");

如果(!SD.begin()){

Serial.println("初始化失败!");

返回;

}

Serial.println("初始化完成。");

// 打开文件。请注意,一次只能打开一个文件,

// 所以你必须在打开另一个之前关闭这个。

myFile = SD.open("test.txt", FILE_WRITE);

// 如果文件打开正常,写入它:

如果(我的文件){

Serial.print("正在写入 test.txt...");

myFile.println("测试 1, 2, 3.");

// 关闭文件:

我的文件.close();

Serial.println("完成。");

} 别的 {

// 如果文件没有打开,打印错误:

Serial.println("打开 test.txt 出错");

}

// 重新打开文件进行读取:

myFile = SD.open("test.txt");

如果(我的文件){

Serial.println("test.txt:");

// 从文件中读取,直到其中没有其他内容:

而(myFile.available()){

Serial.write(myFile.read());

}

// 关闭文件:

我的文件.close();

} 别的 {

// 如果文件没有打开,打印错误:

Serial.println("打开 test.txt 出错");

}

}

无效循环()

{

// 设置后没有任何反应

}

代码

Arduino SD 测试代码

sd_card.ino

 

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.obk20.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'Arduino的DIY SD卡模块',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.obk20.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);