第二十二章 SD卡读写示例



一、材料清单

本章开始,我们正式进入ESP32S3的学习。在学习之前,我们需要将学习要用到的材料先罗列出来。

编号 材料名称 数目
1 ESP32开发板 1
2 SD卡 1

二、知识点介绍

SD卡读写方式

ESP32S3有两种使用SD卡的方法,一种是使用SPI接口访问SD卡,另一种是使用SDMMC接口访问SD卡。

SPI模式使用4个IO来访问SD卡。

SDMMC又分为一位总线模式和四位总线模式。
一位总线模式下,SDMMC使用3个IO即可访问SD卡。
四位总线模式下,SDMMC使用6个IO来访问SD卡。

以上的三种访问方式都可以用来访问SD卡,区别在于它们的访问速度有所差别。

SDMMC的四位总线模式下,访问SD卡的读写速度是最快的。SDMMC的一位总线模式下,访问速度大约是四

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
您好!要实现ESP32S3读取SD卡音频文件并通过I2S输出,您可以按照以下步骤进行: 1. 首先,您需要在ESP32S3上连接一个SD卡模块,并使用SD卡库来读取音频文件。您可以使用ESP32官方的SD卡库或者其他第三方库来实现。 2. 接下来,您需要配置I2S输出。您可以使用ESP32官方的I2S库来设置I2S输出参数,如采样率、位深度等。 3. 一旦您成功读取了音频文件并设置了I2S输出参数,您就可以开始将音频数据写入I2S缓冲区并输出音频信号了。您可以使用I2S库的write函数来将音频数据写入I2S缓冲区。 下面是一个示例代码,用于读取SD卡中的音频文件,并通过I2S输出: ```c #include <Arduino.h> #include <SD.h> #include <driver/i2s.h> #define SD_CS 5 #define I2S_BCK 26 #define I2S_WS 25 #define I2S_DO 27 File audioFile; void setup() { Serial.begin(115200); // 初始化SD卡 if (!SD.begin(SD_CS)) { Serial.println("SD Card initialization failed!"); return; } // 配置I2S输出 i2s_config_t i2sConfig = { .mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX), .sample_rate = 44100, .bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT, .channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT, .communication_format = I2S_COMM_FORMAT_I2S_MSB, .dma_buf_count = 8, .dma_buf_len = 64, .intr_alloc_flags = ESP_INTR_FLAG_LEVEL1, .tx_desc_auto_clear = true, }; i2s_pin_config_t pinConfig = { .bck_io_num = I2S_BCK, .ws_io_num = I2S_WS, .data_out_num = I2S_DO, .data_in_num = I2S_PIN_NO_CHANGE }; i2s_driver_install(I2S_NUM_0, &i2sConfig, 0, NULL); i2s_set_pin(I2S_NUM_0, &pinConfig); // 打开音频文件 audioFile = SD.open("/test.wav"); if (!audioFile) { Serial.println("Failed to open audio file!"); return; } Serial.println("Begin playing audio..."); } void loop() { static uint8_t buffer[1024]; static int bytesRemaining = audioFile.size(); static int bytesRead = 0; // 从SD卡中读取音频数据 int bytesToRead = min(sizeof(buffer), bytesRemaining); int bytesRead = audioFile.read(buffer, bytesToRead); bytesRemaining -= bytesRead; // 将音频数据写入I2S缓冲区并输出 i2s_write(I2S_NUM_0, buffer, bytesRead, portMAX_DELAY); // 如果音频文件已经播放完毕,则关闭文件并停止I2S输出 if (bytesRemaining <= 0) { audioFile.close(); i2s_driver_uninstall(I2S_NUM_0); Serial.println("Audio playback complete!"); while (1) delay(1000); // 停止执行 } } ``` 需要注意的是,以上示例代码仅供参考,实际使用时您需要根据自己的需求进行修改。另外,由于ESP32S3的I2S输出引脚与ESP32不同,请根据实际情况修改示例代码中的引脚定义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天风DIY

花钱往往能节省时间,提高效率。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值