当前位置: 首页 新闻资讯 技术问答

SDNAND贴片式TF卡贴片式SD卡读写方法

SD NAND-贴片式TF卡-贴片式SD卡-免费测试2025-02-21141

SDNAND读写完整过程详解


1. 硬件接线

SDIO模式(高速,推荐)
SDNAND引脚主控引脚(以STM32为例)功能
CLKPC12 / SDIO_CLKSDIO时钟
CMDPD2 / SDIO_CMD命令/响应线
DAT0PC8 / SDIO_D0数据线位0
DAT1PC9 / SDIO_D1数据线位1
DAT2PC10 / SDIO_D2数据线位2
DAT3PC11 / SDIO_D3数据线位3
VCC3.3V电源
GNDGND

硬件设计要点

  • CLK和DAT线串联22Ω电阻,靠近SDNAND放置10pF滤波电容。

  • VCC并联100nF+10μF电容,电源纹波<50mV。

SPI模式(低速,备用)
SDNAND引脚主控引脚(以STM32为例)功能
CLKPA5 / SPI1_SCKSPI时钟
DI (CMD)PA7 / SPI1_MOSI主出从入
DO (DAT0)PA6 / SPI1_MISO主入从出
CSPA4 / GPIO片选信号
VCC3.3V电源
GNDGND

硬件设计要点

  • MISO线加10kΩ上拉电阻,防止信号浮空。

  • SPI时钟初始阶段设为400kHz,初始化后提升至20MHz。


2. 软件初始化与读写代码

SDIO模式驱动(基于STM32 HAL库)
// 初始化SDIOSD_HandleTypeDef hsd;void SD_Init() {
 hsd.Instance = SDIO;
 hsd.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING;
 hsd.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE;
 hsd.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE;
 hsd.Init.BusWide = SDIO_BUS_WIDE_4B;
 hsd.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE;
 hsd.Init.ClockDiv = SDIO_INIT_CLK_DIV;  // 初始化频率400kHz
 HAL_SD_Init(&hsd);
 
 // 切换至高速模式(24MHz)
 HAL_SD_ConfigWideBusOperation(&hsd, SDIO_BUS_WIDE_4B);}// 读取数据块uint8_t buffer[512];HAL_SD_ReadBlocks(&hsd, buffer, 0, 1, 1000);  // 读取扇区0// 写入数据块HAL_SD_WriteBlocks(&hsd, buffer, 1, 1, 1000); // 写入扇区1
SPI模式驱动(基于STM32 HAL库)
// SPI初始化SPI_HandleTypeDef hspi1;void SPI_Init() {
 hspi1.Instance = SPI1;
 hspi1.Init.Mode = SPI_MODE_MASTER;
 hspi1.Init.Direction = SPI_DIRECTION_2LINES;
 hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
 hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
 hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
 hspi1.Init.NSS = SPI_NSS_SOFT;
 hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256; // 400kHz
 HAL_SPI_Init(&hspi1);}// SDNAND初始化uint8_t SD_Init_SPI() {
 // 发送74个时钟脉冲
 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);
 for(int i=0; i<10; i++) HAL_SPI_Transmit(&hspi1, 0xFF, 1, 100);
 
 // 发送CMD0复位
 uint8_t cmd0[] = {0x40, 0x00, 0x00, 0x00, 0x00, 0x95};
 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);
 HAL_SPI_Transmit(&hspi1, cmd0, 6, 100);
 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);
 
 // 等待响应0x01
 uint8_t response;
 do {
   HAL_SPI_Receive(&hspi1, &response, 1, 100);
 } while(response != 0x01);}// 读取数据块uint8_t SD_ReadBlock(uint32_t sector, uint8_t *buffer) {
 uint8_t cmd17[] = {0x51, (sector>>24)&0xFF, (sector>>16)&0xFF,
                   (sector>>8)&0xFF, sector&0xFF, 0xFF};
 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);
 HAL_SPI_Transmit(&hspi1, cmd17, 6, 100);
 
 // 等待0xFE
 uint8_t token;
 do {
   HAL_SPI_Receive(&hspi1, &token, 1, 100);
 } while(token != 0xFE);
 
 // 读取512字节
 HAL_SPI_Receive(&hspi1, buffer, 512, 1000);
 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);}


热门标签:SD NAND FLASH 贴片式TF卡 贴片式SD卡 SD FLASH NAND FLASH


SD NAND-贴片式TF卡-贴片式SD卡-免费测试

深圳市芯存者科技有限公司

售前咨询
售前咨询
售后服务
售后服务
联系我们

电话:176-6539-0767

Q Q:135-0379-986

邮箱:1350379986@qq.com

地址:深圳市南山区蛇口街道后海大道1021号C座C422W8

在线客服 在线客服 QQ客服 微信客服 淘宝店铺 联系我们 返回顶部