NodeMCU读写SD卡.上

2021-02-23 10:55:36 浏览数 (1)

先选择你的型号

选择demo

该示例显示了如何记录来自三个模拟传感器的数据

使用SD库将其复制到SD卡。

电路:

模拟输入0、1和2上的模拟传感器

SD卡连接到SPI总线的方法如下:

** MOSI-引脚11

** MISO-针脚12

** CLK-针脚13

** CS-针脚4

这个是UNO的连接图


得出一个结论,ESP的demo在瞎鸡儿写。。。头打烂给你,在8266上面你找到这些引脚,屁股给你踢歪。

骂归骂,事还得办完。

我们可以知道,一次可以连接上三组spi,如果就看片选的引脚

GPIO0是烧写的引脚,需要慎重。

也就是说,两个SPI的传感器,最少5根线~两个片选

如果就一个SPI的话,可以少一根线。因为就它一个设备,就不远选了

这个图可以说是十分形象了

问了半天,表述很重要。有人教更重要,当然别的小伙伴了。不一一道谢了

SPI的通信原理很简单,它是全双工主从通信方式,这种模式下通常有一个主设备和一个或者多个从设备(注意,同一时刻,只有一个主设备和一个从设备进行通信),需要至少4根线,特殊情况下(单向传输时)3根线也可以。

SPI的器件工作在SPI规定下的两种基本模式,即SPI主模式和SPI从模式。在一个SPI设备中,通常有如下表的几个引脚:

主设备负责启动通信,负责输出时钟信号以及选择通信的从设备。当有多个从设备的时候,因为每个从设备上都有一个CS引脚接入到主设备中,当我们主设备和某个从设备通信时将需要将从设备的CS引脚电平设置为低电平或者高电平(根据实际情况而定)。数据的收发通过MISO和MOSI进行。

NodeMCU的SPI(注意与HSPI区分)引脚(SD0-SD3、CLK、CMD)专门用于与ESP-12E的外接flash芯片进行Quad-SPI通信,因此不能用于SPI应用。

基于ESP8266的NodeMcu具有HSPI,具有4个可用于SPI通信的引脚(GPIO12-GPIO15)。通过这个SPI接口,我们可以将任何支持SPI的设备与NodeMcu连接起来,并与其进行通信

里面的一组SPI已经挂存储芯片了,我们用的硬件只有一个了。

1.标准SPI     标准SPI通常就叫做SPI,它是一种串行外设接口规范,有4根引脚信号:CLK、CS、MOSI、MISO; 2.Dual SPI     它只是针对SPI Flash而言,不是针对所有SPI外设。对于SPI Flash,全双工并不常用,因此扩展了MOSI和MISO的用法,让它们工作在半双工,用以加倍数据传输。也就是对于Dual SPI Flash,可以发送一个命令字节进入dual mode,这样mosi变成SIO0(serial io 0),mosi变成SIO1(serial io 1),这样一个时钟周期内就能传输2个bit数据,加倍了数据传输; 3.Quad SPI     与Dual SPI类似,也是针对SPI Flash,Quad SPI Flash增加了两根I/O线(SIO2,SIO3),目的是一个时钟内传输4个bit。所以可以理解为:在传输速度上,Quad SPI=2Dual SPI=4SPI。 所以对于SPI Flash,有标准spi flash,dual spi , quad spi 三种类型,分别对应3-wire, 4-wire, 6-wire,在相同clock下,线数越多,传输速率越高。

我又找了一张图

代码语言:javascript复制
https://arduino-esp8266.readthedocs.io/en/latest/filesystem.htm

这个人家说了,存储器的优先级高嗷

这个是需要烧录之后启动的时候再用的SPI

我们在Arduino里面用的就是HSPI

在class定义里面找到了

这个是具体的实现

SPI.pins()     该功能用于切换SPI引脚映射,需要在SPI.begin()之前调用SPI.pins(6,7,8,0)。     语法:SPI.pins(sck, miso, mosi, ss)     参数:         sck,时钟引脚,固定为6;         miso,主设备输入,从设备输出引脚,固定为7;         mosi,主设备输出,从设备输入,固定为8;         ss,使能信号引脚,固定为0。     返回值:无;

注意点:通常情况下,ESP8266的SPI对应引脚为MOSI-GPIO13,MISO-GPIO12,SCLK-GPIO14,SS-GPIO15。如果在调用SPI.begin()之前调用SPI.pins(6,7,8,0),那么引脚映射就会变成MOSI-SD1,MISO-SD0,SCLK-CLK,HWCS-GPIO0。可以看出它们和ESP8266模块的外接Flash共享了SPI引脚。这个时候SPI的SS控制位就不是由我们的代码来控制,而是由系统硬件本身来调配,因为它必须确保外接Flash的优先级是最高的。

首先code感知的是avr的SPI库,不对

代码语言:javascript复制
https://github.com/esp8266/Arduino

clone

打开

找到我们的ino

打开库文件的头

找到根源,下篇文章进行SD的监测与读写

0 人点赞