在线时间58 小时
UID175586
注册时间2010-3-14
NXP金币0
TA的每日心情 | 奋斗 2017-1-17 10:45 |
---|
签到天数: 3 天 连续签到: 1 天 [LV.2]偶尔看看I
高级会员

- 积分
- 780
- 最后登录
- 2023-11-17
|
我在源码自带的驱动目录“io”下看了esdhc和sdcard设备驱动的源码,也参考了MFS中的样例程序写了SD卡驱动的程序:
/*
* task_sd.c
*
* Created on: Apr 23, 2013
* Author: SY
*/
#include "app_inc.h"
// 使用SDHC
#include "sdcard.h"
#include "sdcard_esdhc.h"
#include "esdhc.h"
const SDCARD_INIT_STRUCT _my_sdcard_init = {
_io_sdcard_esdhc_init,
_io_sdcard_esdhc_read_block,
_io_sdcard_esdhc_write_block,
ESDHC_BUS_WIDTH_4BIT
};
// SD卡读写操作
void task_sd(uint_32 initial_data)
{
MQX_FILE_PTR com_handle, sdcard_handle;
_mqx_int error_code;
uint_32 tmp = 0;
// 打开SD底层设备通道
com_handle = fopen(BSP_SDCARD_ESDHC_CHANNEL, NULL);
if (com_handle == NULL)
{
printf("[task_sd] pen sdhc failed.\n");
}
else
{
printf("[task_sd] pen sdhc successfully.\n");
}
// 为SD卡模块上电
gpio_init(4, (6), GPIO_DIR_OUT, GPIO_LEVEL_LOW); // TF_PWEN,控制为TF卡座供电
_time_delay(1);
// 初始化SD卡设备
error_code = _io_sdcard_install("msdcard:", (pointer)&_my_sdcard_init , com_handle);
if ( error_code != MQX_OK )
{
printf("[task_sd]:Error installing SD card device (0x%x)\n", error_code);
_task_block();
}
else
{
printf("[task_sd]:installing SD card device ok\n");
}
// 打开SD卡
sdcard_handle = fopen("msdcard:", 0);
if (sdcard_handle == NULL)
{
printf("[task_sd]:Unable to open SD card device.\n");
}
else
{
printf("[task_sd] pen SD card successfully.\n");
}
ioctl(sdcard_handle, IO_IOCTL_GET_BLOCK_SIZE, &tmp);
printf("[task_sd]:IO_IOCTL_GET_BLOCK_SIZE: %d\n", tmp);
ioctl(sdcard_handle, IO_IOCTL_GET_NUM_SECTORS, &tmp);
printf("[task_sd]:IO_IOCTL_GET_NUM_SECTORS: %d\n", tmp);
while (1)
{
_time_delay(1000);
printf("[task_sd]:SB\n");
}
}
可是输出信息总是“[task_sd]:Unable to open SD card device.”
而且后面的查看块大小和块数量的值都是0。在电路上,与TWR板上的引脚接口相同,没有写保护和插入检测引脚,使用SDHC接口。
想问一下,是不是我使用SD卡驱动的方法不对啊。我暂时不想使用MFS,仅仅是一块一块地读SD卡的数据。
|
|