the unit of read/write offset and buffer size is changed to the block size in block device driver read/write interface.
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@798 bbd45198-f89e-11dd-88c7-29a3b14d5316
This commit is contained in:
parent
d394761e22
commit
1e9996c0e5
|
@ -20,24 +20,12 @@ volatile rt_uint32_t rd_cnt;
|
||||||
volatile rt_uint32_t wt_cnt;
|
volatile rt_uint32_t wt_cnt;
|
||||||
volatile rt_int32_t RCA;
|
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)
|
static void sd_delay(rt_uint32_t ms)
|
||||||
{
|
{
|
||||||
ms *= 7326;
|
ms *= 7326;
|
||||||
while(--ms);
|
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)
|
static int sd_cmd_end(int cmd, int be_resp)
|
||||||
{
|
{
|
||||||
int finish0;
|
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)
|
static int sd_data_end(void)
|
||||||
{
|
{
|
||||||
int finish;
|
int finish;
|
||||||
|
@ -113,12 +95,6 @@ static int sd_data_end(void)
|
||||||
return RT_EOK;
|
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)
|
static void sd_cmd0(void)
|
||||||
{
|
{
|
||||||
SDICARG=0x0;
|
SDICARG=0x0;
|
||||||
|
@ -128,12 +104,6 @@ static void sd_cmd0(void)
|
||||||
SDICSTA=0x800; /* Clear cmd_end(no rsp) */
|
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)
|
static int sd_cmd55(void)
|
||||||
{
|
{
|
||||||
SDICARG = RCA << 16;
|
SDICARG = RCA << 16;
|
||||||
|
@ -149,12 +119,6 @@ static int sd_cmd55(void)
|
||||||
return RT_EOK;
|
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)
|
static void sd_sel_desel(char sel_desel)
|
||||||
{
|
{
|
||||||
if(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)
|
static void sd_setbus(void)
|
||||||
{
|
{
|
||||||
do
|
do
|
||||||
|
@ -201,12 +159,6 @@ static void sd_setbus(void)
|
||||||
SDICSTA=0xa00; /* Clear cmd_end(with rsp) */
|
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 sd_ocr(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@ -234,12 +186,6 @@ int sd_ocr(void)
|
||||||
return RT_ERROR;
|
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)
|
rt_uint8_t sd_init(void)
|
||||||
{
|
{
|
||||||
//-- SD controller & card initialize
|
//-- SD controller & card initialize
|
||||||
|
@ -295,12 +241,6 @@ RECMD3:
|
||||||
return RT_EOK;
|
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)
|
rt_uint8_t sd_readblock(rt_uint32_t address, rt_uint8_t* buf)
|
||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
|
@ -349,12 +289,6 @@ RERDCMD:
|
||||||
return RT_EOK;
|
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)
|
rt_uint8_t sd_writeblock(rt_uint32_t address, rt_uint8_t* buf)
|
||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
|
@ -401,56 +335,27 @@ REWTCMD:
|
||||||
|
|
||||||
struct rt_device sdcard_device[4];
|
struct rt_device sdcard_device[4];
|
||||||
struct dfs_partition part[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)
|
static rt_err_t rt_sdcard_init(rt_device_t dev)
|
||||||
{
|
{
|
||||||
return 0;
|
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)
|
static rt_err_t rt_sdcard_open(rt_device_t dev, rt_uint16_t oflag)
|
||||||
{
|
{
|
||||||
return 0;
|
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)
|
static rt_err_t rt_sdcard_close(rt_device_t dev)
|
||||||
{
|
{
|
||||||
return 0;
|
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)
|
static rt_err_t rt_sdcard_control(rt_device_t dev, rt_uint8_t cmd, void *args)
|
||||||
{
|
{
|
||||||
return 0;
|
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)
|
static rt_size_t rt_sdcard_read(rt_device_t dev, rt_off_t pos, void* buffer, rt_size_t size)
|
||||||
{
|
{
|
||||||
int i;
|
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 */
|
/* 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);
|
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_uint8_t*)((rt_uint8_t*)buffer + i * SECTOR_SIZE));
|
||||||
rt_sem_release(part->lock);
|
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;
|
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)
|
static rt_size_t rt_sdcard_write (rt_device_t dev, rt_off_t pos, const void* buffer, rt_size_t size)
|
||||||
{
|
{
|
||||||
int i;
|
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 */
|
/* 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);
|
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_uint8_t*)((rt_uint8_t*)buffer + i * SECTOR_SIZE));
|
||||||
rt_sem_release(part->lock);
|
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;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* This function will register sd card to device system
|
|
||||||
*
|
|
||||||
* @param hook the hook function
|
|
||||||
*/
|
|
||||||
void rt_hw_sdcard_init()
|
void rt_hw_sdcard_init()
|
||||||
{
|
{
|
||||||
rt_uint8_t i, status;
|
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);
|
part[i].lock = rt_sem_create(sname, 1, RT_IPC_FLAG_FIFO);
|
||||||
|
|
||||||
/* register sdcard device */
|
/* register sdcard device */
|
||||||
|
sdcard_device[i].type = RT_Device_Class_Block;
|
||||||
sdcard_device[i].init = rt_sdcard_init;
|
sdcard_device[i].init = rt_sdcard_init;
|
||||||
sdcard_device[i].open = rt_sdcard_open;
|
sdcard_device[i].open = rt_sdcard_open;
|
||||||
sdcard_device[i].close = rt_sdcard_close;
|
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);
|
part[0].lock = rt_sem_create("sem_sd0", 1, RT_IPC_FLAG_FIFO);
|
||||||
|
|
||||||
/* register sdcard device */
|
/* register sdcard device */
|
||||||
|
sdcard_device[0].type = RT_Device_Class_Block;
|
||||||
sdcard_device[0].init = rt_sdcard_init;
|
sdcard_device[0].init = rt_sdcard_init;
|
||||||
sdcard_device[0].open = rt_sdcard_open;
|
sdcard_device[0].open = rt_sdcard_open;
|
||||||
sdcard_device[0].close = rt_sdcard_close;
|
sdcard_device[0].close = rt_sdcard_close;
|
||||||
|
|
Loading…
Reference in New Issue