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-米客方德。

审核编辑:汤梓红

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

    关注

    455

    文章

    50851

    浏览量

    423879
  • 嵌入式
    +关注

    关注

    5083

    文章

    19131

    浏览量

    305465
  • NAND
    +关注

    关注

    16

    文章

    1682

    浏览量

    136176
  • 驱动
    +关注

    关注

    12

    文章

    1840

    浏览量

    85307
  • STM32
    +关注

    关注

    2270

    文章

    10901

    浏览量

    356193
收藏 人收藏

    评论

    相关推荐

    USB一线通监控副屏设计方案

    在2024年全国大学生嵌入芯片与系统设计竞赛中,各大高校学子纷纷展现出卓越的创新能力和扎实的技术功底。今天,特别为大家分享获奖作品——USB一线通监控副屏,它以其独特的设计和实用的功能赢得广泛好评与认可。
    的头像 发表于 11-28 09:45 714次阅读
    USB<b class='flag-5'>一线</b>通监控副屏设计方案

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

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

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

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

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

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

    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

    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

    基于TINI的一线制网络互连技术

    概述 TINI的基本概念和工作原理,分析 TINI的软件环境;简述基于一线制技术的温度型iButton DS1920和小型气象仪,给出利用 TINI实现一线制网络与 Internet连接的应用实例。
    发表于 04-13 10:15 20次下载

    一线总线器件实现移动数据收集

    一线总线是DALLSA公司推出的总线标准.文中介绍了一线总线信息纽扣器件iBUT-TON设计手持移动数据收集器的设计方法,给出了该设计的硬件构成和软件框图,最后给出了将该数据收
    发表于 04-22 13:57 14次下载

    温度传感器和一线总线协议

    数字一线温度传感器的出现为数字传感器的发展奠定了基础。介绍了一线总线温度传感器的工作原理及其采用的协议规范,讨论了其同单片机和有关电路同其的接口电路,给出了试
    发表于 06-24 10:17 10次下载

    基于一线传感器嵌入软件系统设计的实现

    阐述了无操作系统的嵌入软件系统设计的不同结构类型,并结合使用一线温度传感器的测温系统,给出了嵌入软件系统设计主要使用的两种方案。同时,对DS18B20 使用C 语言
    发表于 08-29 10:55 33次下载

    DS18B20 一线总线数字传感器

    DS18B20、DS1822 “一线总线”数字化温度传感器是DALLAS最新单线数字温度传感器, 同DS1820样,DS18B20也支持“一线总线”接口,测量温度范围为 -55°C~+125°C,在-10~+85°C范围内,精
    发表于 01-16 15:15 134次下载

    一线Linux嵌入开发工程师的对话

    知识,从你一线开发经验来说,给我们些建议: 陈工回答: 对于嵌入Linux入门,如果有定基础,可以从驱动开始;如果没有基础,我个人建议
    的头像 发表于 03-14 07:43 4743次阅读

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

    文章目录rt-threadSDIO驱动框架分析之SD驱动1.前言2.SDIO通用驱动框架介绍3.文件架构分析4.
    的头像 发表于 04-04 17:41 1009次阅读
    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>)

    芯知识 | 语音芯片支持一线串口和两线串口的作用与应用优势

    随着科技的不断进步,语音芯片作为现代电子产品中的核心组件,其功能和性能也在不断提升。其中,语音芯片支持一线串口和两线串口的功能,在实际应用中具有重要的作用和优势。首先,让我们了解一线串口和两线
    的头像 发表于 12-20 08:39 741次阅读
    芯知识 | 语音芯片支持<b class='flag-5'>一线</b>串口和两<b class='flag-5'>线</b>串口的作用与应用优势