0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32用一线式驱动SD NAND,SDIO的一线式驱动

mkfounder 来源:mkfounder 作者:mkfounder 2023-12-19 14:14 次阅读

SDIO的一线式和四线式

SDIO(Secure Digital Input/Output)是一种用于在嵌入式系统中连接外部设备的标准接口。在SDIO标准中,一线式和四线式是指SDIO接口的不同工作模式。

一线式(Single-Line Mode):

工作原理: 在一线式模式下,SDIO接口仅使用单个数据线进行通信。这个模式通常用于相对简单的应用,其中数据传输速度要求不是很高。

适用情境: 适用于对数据传输速度要求不高的场景,例如连接一些低速外设。

四线式(Four-Line Mode):

工作原理: 在四线式模式下,SDIO接口使用四根线进行通信,包括一个命令线、一个数据线、一个时钟线和一个电源线。这个模式支持更高的数据传输速度。

适用情境: 适用于对数据传输速度有较高要求的应用,例如连接高速外设,比如摄像头、Wi-Fi模块等。

选择一线式还是四线式取决于具体的应用需求。如果应用对速度要求不高,或者对硬件资源有限,可以选择一线式。如果需要更高的数据传输速度,特别是在连接高速外设的情况下,四线式可能更为合适。

需要注意的是,使用四线式模式可能会对系统的硬件和软件设计提出更高的要求,因为需要支持更复杂的通信协议和更高的时钟频率。

STM32的SDIO一线式驱动[SD NAND]([SD NAND | MK-米客方德])

有些平台和MCU没有SDIO接口的,STM32大部分型号有SDIO接口,具体可以看芯片手册,

程序代码

SD NAND初始化

/**
 * @brief初始化SD
 * @param
 * @retval返回值:0 初始化正确;其他值,初始化错误
 */uint8_tsd_init(void){

uint8_t SD_Error;

/* 初始化时的时钟不能大于400KHZ */
g_sdcard_handler.Instance = SDIO;
g_sdcard_handler.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING;                       /* 上升沿 */
g_sdcard_handler.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE;                  /* 不使用bypass模式,直接用HCLK进行分频得到SDIO_CK */
g_sdcard_handler.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE;           /* 空闲时不关闭时钟电源 */
g_sdcard_handler.Init.BusWide = SDIO_BUS_WIDE_1B;                               /* 1位数据线 */
g_sdcard_handler.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_ENABLE;  /* 开启硬件流控 */
g_sdcard_handler.Init.ClockDiv = SDIO_TRANSFER_CLK_DIV;                         /* SD传输时钟频率最大25MHZ */

SD_Error =HAL_SD_Init(&g_sdcard_handler);
if(SD_Error != HAL_OK)
{
return1;
}
//SD_Error = HAL_SD_ConfigWideBusOperation(&g_sdcard_handler, SDIO_BUS_WIDE_4B);/* 使能宽总线模式,-O0 优化会有问题 *///if (SD_Error != HAL_OK)//{//return 2;//}


return0;}

测试SD NAND的写入

/**
 * @brief初始化SD
 * @param
 * @retval返回值:0 初始化正确;其他值,初始化错误
 */uint8_tsd_init(void){

uint8_t SD_Error;

/* 初始化时的时钟不能大于400KHZ */
g_sdcard_handler.Instance = SDIO;
g_sdcard_handler.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING;                       /* 上升沿 */
g_sdcard_handler.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE;                  /* 不使用bypass模式,直接用HCLK进行分频得到SDIO_CK */
g_sdcard_handler.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE;           /* 空闲时不关闭时钟电源 */
g_sdcard_handler.Init.BusWide = SDIO_BUS_WIDE_1B;                               /* 1位数据线 */
g_sdcard_handler.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_ENABLE;  /* 开启硬件流控 */
g_sdcard_handler.Init.ClockDiv = SDIO_TRANSFER_CLK_DIV;                         /* SD传输时钟频率最大25MHZ */

SD_Error =HAL_SD_Init(&g_sdcard_handler);
if(SD_Error != HAL_OK)
{
return1;
}
//SD_Error = HAL_SD_ConfigWideBusOperation(&g_sdcard_handler, SDIO_BUS_WIDE_4B);/* 使能宽总线模式,-O0 优化会有问题 *///if (SD_Error != HAL_OK)//{//return 2;//}


return0;}

测试SD NAND的读出

/**
 * @brief测试SD卡的读取
 *@notesecaddr地址开始,读取seccnt个扇区的数据
 * @paramsecaddr : 扇区地址
 * @paramseccnt: 扇区数
 * @retval
 */voidsd_test_read(uint32_t secaddr,uint32_t seccnt){

uint32_t i;
uint8_t*buf;
uint8_t sta =0;

buf =mymalloc(SRAMIN, seccnt *512);     /* 申请内存,从SDRAM申请内存 */
sta =sd_read_disk(buf, secaddr, seccnt);/* 读取secaddr扇区开始的内容 */

if(sta ==0)
{
lcd_show_string(30,170,200,16,16,"USART1 Sending Data...", BLUE);
printf("SECTOR %d DATA:rn", secaddr);

for(i =0; i < seccnt *512; i++)
{
printf("%x ", buf[i]);/* 打印secaddr开始的扇区数据 */
}

printf("rnDATA ENDEDrn");
lcd_show_string(30,170,200,16,16,"USART1 Send Data Over!", BLUE);
}
else
{
printf("err:%drn", sta);
lcd_show_string(30,170,200,16,16,"SD read Failure!      ", BLUE);
}

myfree(SRAMIN, buf);/* 释放内存 */}

实验现象

image.png

image.png

使用的芯片是MK-米客方德的工业级芯片MKDV1GIL-AS,

image.png

需要工程的可以联系MK-米客方德。

审核编辑:汤梓红

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

    关注

    447

    文章

    47838

    浏览量

    409224
  • 嵌入式
    +关注

    关注

    4984

    文章

    18300

    浏览量

    288656
  • NAND
    +关注

    关注

    16

    文章

    1546

    浏览量

    134822
  • 驱动
    +关注

    关注

    11

    文章

    1718

    浏览量

    84361
  • STM32
    +关注

    关注

    2240

    文章

    10675

    浏览量

    348872
收藏 人收藏

    评论

    相关推荐

    什么是SD NAND存储芯片?

    前言   大家好,我们般在STM32项目开发中或者在其他嵌入开发中,经常会用到存储芯片存储数据。今天我和大家来介绍款存储芯片,我这里采用(雷龙) CS创世
    发表于 01-05 17:54

    BeagleBone Black USB一线通(1)

    http://elinux.org/Beagleboard:Updating_The_Software镜像文件下载后,解压出来个.img文件,推荐的烧写工具DiskImager,烧写到Micro-SD
    发表于 10-22 17:01

    今日话题:一线城市 or 二线城市?

    `社会学家郑也夫说人生不外乎在追求三种状态:舒服、刺激、牛B。其实也是道城市选择题:皆因年轻的我们,爱冒险胜过爱安逸,爱牛B胜过爱舒服,自愿进入人生愿境最诱人、生存逻辑又最残酷的一线城市。这是
    发表于 03-09 10:10

    JQ8400一线串口我应该怎么接线啊?两线串口该怎么接线?

    JQ8400一线串口我应该怎么接线啊?两线串口该怎么接线?淘宝买的那测试程序不响,不知道是不是接线出问题还是怎样,求教!!
    发表于 01-03 21:14

    一线城市程序员薪资数据概述

    一线城市程序员薪资数据出炉,你属于哪档?
    发表于 06-26 16:05

    一线工程师告诉你嵌入行业真实与发展前景

    `个人说明:本人并不是年薪百万的技术大牛,但总算是名合格的嵌入工程师,现在某企业担任嵌入软件工程师开发职,以下观点可能会带有片面或者分析不全,但却是
    发表于 05-11 08:30

    分析一线公司当前产品,看LED世界走向

    分析一线公司当前产品,看LED世界走向
    发表于 06-01 07:08

    lcd2004一线屏仿真

    )图5四,编辑main.c 代码如Proteus8.9 VSM Studio GCC编译器仿真STM32F407ZGT6系列015_lcd2004一线屏(如下图6所示)图6五,Main.c 代码:/* Main.c file generated by New Projec
    发表于 12-13 07:20

    FPGA的JTAG接口和ARM的JTAG接口线是否可以共用同一线

    FPGA的JTAG接口和ARM的JTAG接口线是否可以共用同一线呢?是否可以同usb转JTAG线给ARM和FPGA以及dsp调试程序呢?
    发表于 08-10 14:54

    SD NANDSDIOSTM32上的应用详解(上篇)

    的命令访问(STM32主机通过驱动SDIO外设通过CMD命令线向从机SD卡发送命令),SDIO
    发表于 11-15 15:17

    rt-thread SDIO驱动框架分析(SD卡flash驱动\SD Nand flash驱动

    (点击跳转))在 rt_hw_sdio_init 函数中,驱动程序主要初始化以下几个结构体:stm32外设HAL库配置结构体 SD_HandleTypeDef hsd
    发表于 04-04 16:26

    【正点原子STM32精英V2开发板体验】CS SD NAND在本开发板上的测试-是时候将TF卡换为SD NAND了!

    前言嵌入项目中,比较常见的存储扩展方案是使用TF/SD卡或者EMMC或者RAW NAND,各种方案都有其优缺点,而SD NAND相对于上述
    发表于 04-18 23:03

    CS SD NANDSTM32精英V2开发板的测试-是时候将TF卡换为SD NAND

    前言 嵌入项目中,比较常见的存储扩展方案是使用TF/SD卡或者EMMC或者RAW NAND,各种方案都有其优缺点,而SD NAND相对于上
    发表于 09-26 17:40

    rt-thread SDIO驱动框架分析(贴片SD卡flash驱动\SD Nand flash驱动

    文章目录rt-threadSDIO驱动框架分析之SD驱动1.前言2.SDIO通用驱动框架介绍3.文件架构分析4.
    的头像 发表于 04-04 17:41 596次阅读
    rt-thread <b class='flag-5'>SDIO</b><b class='flag-5'>驱动</b>框架分析(贴片<b class='flag-5'>SD</b>卡flash<b class='flag-5'>驱动</b>\<b class='flag-5'>SD</b> <b class='flag-5'>Nand</b> flash<b class='flag-5'>驱动</b>)

    使用MM32F3270的SDIO驱动SD

    使用MM32F3270的SDIO驱动SD
    的头像 发表于 09-27 15:56 429次阅读
    使用MM32F3270的<b class='flag-5'>SDIO</b><b class='flag-5'>驱动</b><b class='flag-5'>SD</b>卡