|
@@ -20,24 +20,12 @@ volatile rt_uint32_t rd_cnt;
|
|
|
volatile rt_uint32_t wt_cnt;
|
|
|
volatile rt_int32_t RCA;
|
|
|
|
|
|
-/**
|
|
|
- * This function will set a hook function, which will be invoked when a memory
|
|
|
- * block is allocated from heap memory.
|
|
|
- *
|
|
|
- * @param hook the hook function
|
|
|
- */
|
|
|
static void sd_delay(rt_uint32_t ms)
|
|
|
{
|
|
|
ms *= 7326;
|
|
|
while(--ms);
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * This function will set a hook function, which will be invoked when a memory
|
|
|
- * block is allocated from heap memory.
|
|
|
- *
|
|
|
- * @param hook the hook function
|
|
|
- */
|
|
|
static int sd_cmd_end(int cmd, int be_resp)
|
|
|
{
|
|
|
int finish0;
|
|
@@ -88,12 +76,6 @@ static int sd_cmd_end(int cmd, int be_resp)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * This function will set a hook function, which will be invoked when a memory
|
|
|
- * block is allocated from heap memory.
|
|
|
- *
|
|
|
- * @param hook the hook function
|
|
|
- */
|
|
|
static int sd_data_end(void)
|
|
|
{
|
|
|
int finish;
|
|
@@ -113,12 +95,6 @@ static int sd_data_end(void)
|
|
|
return RT_EOK;
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * This function will set a hook function, which will be invoked when a memory
|
|
|
- * block is allocated from heap memory.
|
|
|
- *
|
|
|
- * @param hook the hook function
|
|
|
- */
|
|
|
static void sd_cmd0(void)
|
|
|
{
|
|
|
SDICARG=0x0;
|
|
@@ -128,12 +104,6 @@ static void sd_cmd0(void)
|
|
|
SDICSTA=0x800; /* Clear cmd_end(no rsp) */
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * This function will set a hook function, which will be invoked when a memory
|
|
|
- * block is allocated from heap memory.
|
|
|
- *
|
|
|
- * @param hook the hook function
|
|
|
- */
|
|
|
static int sd_cmd55(void)
|
|
|
{
|
|
|
SDICARG = RCA << 16;
|
|
@@ -149,12 +119,6 @@ static int sd_cmd55(void)
|
|
|
return RT_EOK;
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * This function will set a hook function, which will be invoked when a memory
|
|
|
- * block is allocated from heap memory.
|
|
|
- *
|
|
|
- * @param hook the hook function
|
|
|
- */
|
|
|
static void sd_sel_desel(char sel_desel)
|
|
|
{
|
|
|
if(sel_desel)
|
|
@@ -182,12 +146,6 @@ RECMDD7:
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * This function will set a hook function, which will be invoked when a memory
|
|
|
- * block is allocated from heap memory.
|
|
|
- *
|
|
|
- * @param hook the hook function
|
|
|
- */
|
|
|
static void sd_setbus(void)
|
|
|
{
|
|
|
do
|
|
@@ -201,12 +159,6 @@ static void sd_setbus(void)
|
|
|
SDICSTA=0xa00; /* Clear cmd_end(with rsp) */
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * This function will set a hook function, which will be invoked when a memory
|
|
|
- * block is allocated from heap memory.
|
|
|
- *
|
|
|
- * @param hook the hook function
|
|
|
- */
|
|
|
int sd_ocr(void)
|
|
|
{
|
|
|
int i;
|
|
@@ -234,12 +186,6 @@ int sd_ocr(void)
|
|
|
return RT_ERROR;
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * This function will set a hook function, which will be invoked when a memory
|
|
|
- * block is allocated from heap memory.
|
|
|
- *
|
|
|
- * @param hook the hook function
|
|
|
- */
|
|
|
rt_uint8_t sd_init(void)
|
|
|
{
|
|
|
//-- SD controller & card initialize
|
|
@@ -295,12 +241,6 @@ RECMD3:
|
|
|
return RT_EOK;
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * This function will set a hook function, which will be invoked when a memory
|
|
|
- * block is allocated from heap memory.
|
|
|
- *
|
|
|
- * @param hook the hook function
|
|
|
- */
|
|
|
rt_uint8_t sd_readblock(rt_uint32_t address, rt_uint8_t* buf)
|
|
|
{
|
|
|
int status;
|
|
@@ -349,12 +289,6 @@ RERDCMD:
|
|
|
return RT_EOK;
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * This function will set a hook function, which will be invoked when a memory
|
|
|
- * block is allocated from heap memory.
|
|
|
- *
|
|
|
- * @param hook the hook function
|
|
|
- */
|
|
|
rt_uint8_t sd_writeblock(rt_uint32_t address, rt_uint8_t* buf)
|
|
|
{
|
|
|
int status;
|
|
@@ -401,56 +335,27 @@ REWTCMD:
|
|
|
|
|
|
struct rt_device sdcard_device[4];
|
|
|
struct dfs_partition part[4];
|
|
|
-/**
|
|
|
- * This function will set a hook function, which will be invoked when a memory
|
|
|
- * block is allocated from heap memory.
|
|
|
- *
|
|
|
- * @param hook the hook function
|
|
|
- */
|
|
|
+
|
|
|
static rt_err_t rt_sdcard_init(rt_device_t dev)
|
|
|
{
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * This function will set a hook function, which will be invoked when a memory
|
|
|
- * block is allocated from heap memory.
|
|
|
- *
|
|
|
- * @param hook the hook function
|
|
|
- */
|
|
|
static rt_err_t rt_sdcard_open(rt_device_t dev, rt_uint16_t oflag)
|
|
|
{
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * This function will set a hook function, which will be invoked when a memory
|
|
|
- * block is allocated from heap memory.
|
|
|
- *
|
|
|
- * @param hook the hook function
|
|
|
- */
|
|
|
static rt_err_t rt_sdcard_close(rt_device_t dev)
|
|
|
{
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * This function will set a hook function, which will be invoked when a memory
|
|
|
- * block is allocated from heap memory.
|
|
|
- *
|
|
|
- * @param hook the hook function
|
|
|
- */
|
|
|
static rt_err_t rt_sdcard_control(rt_device_t dev, rt_uint8_t cmd, void *args)
|
|
|
{
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * This function will set a hook function, which will be invoked when a memory
|
|
|
- * block is allocated from heap memory.
|
|
|
- *
|
|
|
- * @param hook the hook function
|
|
|
- */
|
|
|
static rt_size_t rt_sdcard_read(rt_device_t dev, rt_off_t pos, void* buffer, rt_size_t size)
|
|
|
{
|
|
|
int i;
|
|
@@ -463,10 +368,10 @@ static rt_size_t rt_sdcard_read(rt_device_t dev, rt_off_t pos, void* buffer, rt_
|
|
|
}
|
|
|
|
|
|
/* read all sectors */
|
|
|
- for (i = 0; i < size / SECTOR_SIZE; i ++)
|
|
|
+ for (i = 0; i < size; i ++)
|
|
|
{
|
|
|
rt_sem_take(part->lock, RT_WAITING_FOREVER);
|
|
|
- sd_readblock((part->offset + i)*SECTOR_SIZE + pos,
|
|
|
+ sd_readblock((part->offset + i + pos)*SECTOR_SIZE,
|
|
|
(rt_uint8_t*)((rt_uint8_t*)buffer + i * SECTOR_SIZE));
|
|
|
rt_sem_release(part->lock);
|
|
|
}
|
|
@@ -475,12 +380,6 @@ static rt_size_t rt_sdcard_read(rt_device_t dev, rt_off_t pos, void* buffer, rt_
|
|
|
return size;
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * This function will set a hook function, which will be invoked when a memory
|
|
|
- * block is allocated from heap memory.
|
|
|
- *
|
|
|
- * @param hook the hook function
|
|
|
- */
|
|
|
static rt_size_t rt_sdcard_write (rt_device_t dev, rt_off_t pos, const void* buffer, rt_size_t size)
|
|
|
{
|
|
|
int i;
|
|
@@ -493,10 +392,10 @@ static rt_size_t rt_sdcard_write (rt_device_t dev, rt_off_t pos, const void* buf
|
|
|
}
|
|
|
|
|
|
/* read all sectors */
|
|
|
- for (i = 0; i < size / SECTOR_SIZE; i++)
|
|
|
+ for (i = 0; i < size; i++)
|
|
|
{
|
|
|
rt_sem_take(part->lock, RT_WAITING_FOREVER);
|
|
|
- sd_writeblock((part->offset + i)*SECTOR_SIZE + pos,
|
|
|
+ sd_writeblock((part->offset + i + pos)*SECTOR_SIZE,
|
|
|
(rt_uint8_t*)((rt_uint8_t*)buffer + i * SECTOR_SIZE));
|
|
|
rt_sem_release(part->lock);
|
|
|
}
|
|
@@ -505,11 +404,6 @@ static rt_size_t rt_sdcard_write (rt_device_t dev, rt_off_t pos, const void* buf
|
|
|
return size;
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * This function will register sd card to device system
|
|
|
- *
|
|
|
- * @param hook the hook function
|
|
|
- */
|
|
|
void rt_hw_sdcard_init()
|
|
|
{
|
|
|
rt_uint8_t i, status;
|
|
@@ -549,6 +443,7 @@ void rt_hw_sdcard_init()
|
|
|
part[i].lock = rt_sem_create(sname, 1, RT_IPC_FLAG_FIFO);
|
|
|
|
|
|
/* register sdcard device */
|
|
|
+ sdcard_device[i].type = RT_Device_Class_Block;
|
|
|
sdcard_device[i].init = rt_sdcard_init;
|
|
|
sdcard_device[i].open = rt_sdcard_open;
|
|
|
sdcard_device[i].close = rt_sdcard_close;
|
|
@@ -570,6 +465,7 @@ void rt_hw_sdcard_init()
|
|
|
part[0].lock = rt_sem_create("sem_sd0", 1, RT_IPC_FLAG_FIFO);
|
|
|
|
|
|
/* register sdcard device */
|
|
|
+ sdcard_device[0].type = RT_Device_Class_Block;
|
|
|
sdcard_device[0].init = rt_sdcard_init;
|
|
|
sdcard_device[0].open = rt_sdcard_open;
|
|
|
sdcard_device[0].close = rt_sdcard_close;
|