Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
rt_thread移植到stm32f429出现的问题
发布于 2015-11-02 15:12:45 浏览:3144
订阅该版
移植搞了好多天,终于sd卡初始化通过了,但是文件系统初始化过不去程序在```int rt_hw_sdcard_init(void) { if (SD_Init() == SD_OK) { SD_Error status; rt_uint8_t *sector; status = SD_GetCardInfo(&SDCardInfo); if (status != SD_OK) { rt_kprintf("SD_GetCardInfo if fail. "); goto __return; } rt_kprintf("SD_GetCardInfo ok. "); rt_kprintf("sdcard info:. carcapacity = %x,cardblocksize = %lu. ",SDCardInfo.CardCapacity,SDCardInfo.CardBlockSize) ; status = SD_SelectDeselect((u32) (SDCardInfo.RCA << 16)); if (status != SD_OK) { rt_kprintf("SD_SelectDeselect is error. "); goto __return;// } rt_kprintf("SD set to transfer mode. "); SD_EnableWideBusOperation(SDIO_BusWide_4b); if (status != SD_OK) { rt_kprintf("enable wide bus operation fail. "); goto __return; } SD_SetDeviceMode(SD_DMA_MODE); if (status != SD_OK) { rt_kprintf("set Device mode fail. "); goto __return; } /* get the first sector to read partition table */ _**sector = (rt_uint8_t*) rt_malloc (256);**_ if (sector == RT_NULL) { rt_kprintf("allocate partition sector buffer failed "); return 0; } status = SD_ReadBlock((u8*)sector,0, 512); if (status == SD_OK) { /* get the first partition */ if (dfs_filesystem_get_partition(&part, sector, 0) != 0) { /* there is no partition */ part.offset = 0; part.size = 0; } } else { /* there is no partition table */ part.offset = 0; part.size = 0; } /* release sector buffer */ rt_free(sector); /* register sdcard device */ sdcard_device.type = RT_Device_Class_Block; sdcard_device.init = rt_sdcard_init; sdcard_device.open = rt_sdcard_open; sdcard_device.close = rt_sdcard_close; sdcard_device.read = rt_sdcard_read; sdcard_device.write = rt_sdcard_write; sdcard_device.control = rt_sdcard_control; /* no private */ sdcard_device.user_data = &SDCardInfo; rt_device_register(&sdcard_device, "sd0", RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_REMOVABLE | RT_DEVICE_FLAG_STANDALONE); return 0; } __return: rt_kprintf("sdcard init failed "); return 0; }``` 画线的地方前面执行正常,单步调试没有发现什么异常,运行效果在附件,一起来看看 ![QQ截图20151102145250.png](https://oss-club.rt-thread.org/uploads/7760_d505df248326cf845a19392b977ec5c4.png) ![QQ截图20151102151546.png](https://oss-club.rt-thread.org/uploads/7760_c2ff2a745fcb51275dc0cb9c96a2ebc2.png) ![QQ截图20151102151714.png](https://oss-club.rt-thread.org/uploads/7760_848469d1cf133c818e342b356767a12c.png) ![55559.jpg](https://oss-club.rt-thread.org/uploads/7760_5555a790b591c91099a8c81394ea97d2.jpg)
查看更多
7
个回答
默认排序
按发布时间排序
师院小Q
2015-11-02
这家伙很懒,什么也没写!
卡是512Mb的,当使用16G卡的时候,每次都是上电(重新插卡)的时候能读到卡容量,复位单片机后会产生错误,效果看附件
师院小Q
2015-11-02
这家伙很懒,什么也没写!
卡容量和块大小应该是有问题,问题在哪还没找到
aozima
2015-11-02
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
建议参考realtouch中那样写SDIO总线的驱动,这样SD卡的识别都是成熟的。
师院小Q
2015-11-06
这家伙很懒,什么也没写!
``` void rt_hw_sdcard_init(void) { NVIC_InitTypeDef NVIC_InitStructure; if (SD_Init() == SD_OK) { u16 i=0; SD_Error status; rt_uint8_t *sector; SD_Error errorstatus=SD_OK; status = SD_GetCardInfo(&SDCardInfo); if (status != SD_OK) { rt_kprintf("SD_GetCardInfo if fail. "); goto __return; } rt_kprintf("SD_GetCardInfo ok. "); rt_kprintf("sdcard info:. carcapacity = %x,cardblocksize = %lu. ",SDCardInfo.CardCapacity,SDCardInfo.CardBlockSize) ; status = SD_SelectDeselect((u32) (SDCardInfo.RCA << 16)); if (status != SD_OK) { rt_kprintf("SD_SelectDeselect is error. "); goto __return;// } rt_kprintf("SD_SelectDeselect is ok. "); ``` 我参考了realtouch的驱动,现在读到的内存和块大小应该是正确的,但是在执行 ``` SD_Error SD_SelectDeselect(uint32_t addr) { SD_Error errorstatus = SD_OK; SDIO_CmdInitStructure.SDIO_Argument = addr;// SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SEL_DESEL_CARD; SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; SDIO_SendCommand(&SDIO_CmdInitStructure);// errorstatus = CmdResp1Error(7); rt_kprintf("errorstatus=%d ",errorstatus); return(errorstatus); } ``` 会出错
aozima
2015-11-06
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
realtouch中有两份SD驱动,一份是修改ST提供的示例,直接把SD卡注册成一个块设备。 一个是实现标准的SDIO总线,然后由RT-Thread中的MMCSD组件去识别SD卡。 使用第一种方式看起来比较简单,但容易出现各种兼容性问题。 第二种难度略高一些,但只要SDIO总线驱动写好,不存在卡兼容性问题。
zhuziyu4
2016-06-28
这家伙很懒,什么也没写!
关键点还是在SDIO总线要写好,STM32F1的总线驱动不知道怎么搞…… aozima可否帮忙看看
topic5126.html
撰写答案
登录
注册新账号
关注者
0
被浏览
3.1k
关于作者
师院小Q
这家伙很懒,什么也没写!
提问
2
回答
7
被采纳
0
关注TA
发私信
相关问题
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
【NXP-MCXA153】 定时器驱动移植
2
GD32F450 看门狗驱动适配
3
【NXP-MCXA153】看门狗驱动移植
4
RT-Thread Studio V2.2.9 Release Note
5
CherryUSB的bootuf2配置
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
freemodbus
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
踩姑娘的小蘑菇
7
个答案
2
次被采纳
a1012112796
15
个答案
1
次被采纳
Ryan_CW
5
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
本月文章贡献
YZRD
3
篇文章
6
次点赞
catcatbing
3
篇文章
6
次点赞
lizimu
2
篇文章
8
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部