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卡的读取 *@note从secaddr地址开始,读取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);/* 释放内存 */}实验现象
使用的芯片是mk-米客方德的工业级芯片mkdv1gil-as,
需要工程的可以联系mk-米客方德。
鸿蒙OS优于安卓 未来将开源
通用测量仪器常见的检修方法
3D Global在裸眼立体屏幕领域的应用
移动支付看俏,安全问题首当其冲
德国正在计划建设工业园区5G局域网的本地频率
STM32用一线式驱动SD NAND,SDIO的一线式驱动
磐石测控:深圳拉力试验机怎么校验?
AIoT已成为各大行业智能化升级的最佳通道 也是物联网发展的重要方向
机器人再厉害,也永远不会超越人类
智能家居的4点好处详细说明
V2X安全警示系统解决方案
达到军工级别的工业显示器具有哪些性能和特征
压电化学传感器的基片材料
未来智能电话机器人将会取代人工客服吗
什么是绿色环保电池
ADI公司选择Arrow Electronics作为全球分销渠道战略合作伙伴
单片机下载程序的三种方式介绍
一种结合数据完整性保护和数据机密性保护的安全路由协议
aigo国民好物固态硬盘P3000:性能出色性价比高
直降200!高颜值+旗舰级功能体验OPPOA95直接冲就对了