Esempio n. 1
0
/**
 * @brief	片选中SD卡,使其工作
 * @param  
 * @retval 	1 选中成功
			0 选中失败
 */
u8 SD_Select(void)
{	
	/* 片选设备 */
	SPI_SoftwareSELCmd(HT_SPI0, SPI_SEL_ACTIVE);
	
	if(SD_WaitReady())	//等待成功
		return 1;	
	else				//等待失败
	{
		SD_DisSelect();
		return 0;		
	}
}
Esempio n. 2
0
DRESULT disk_ioctl (
	BYTE drv,		/* Physical drive nmuber (0..) */
	BYTE ctrl,		/* Control code */
	void *buff		/* Buffer to send/receive control data */
)
{

    DRESULT res;


    if (drv)
    {    
        return RES_PARERR;  // only supports single disk operation, or return parameter error
    }
    
    // FATFS only deal with the current version of CTRL_SYNC, GET_SECTOR_COUNT, GET_BLOCK_SIZ three commands
    switch(ctrl)
    {
    case CTRL_SYNC:
        MSD_CS_ENABLE();
        if(SD_WaitReady()==0)
        {
            res = RES_OK;
        }
        else
        {
            res = RES_ERROR;
        }
        MSD_CS_DISABLE();
        break;
        
    case GET_BLOCK_SIZE:
        *(WORD*)buff = 512;
        res = RES_OK;
        break;

    case GET_SECTOR_COUNT:
        *(DWORD*)buff = SD_GetCapacity();
        res = RES_OK;
        break;
    default:
        res = RES_PARERR;
        break;
    }

    return res;
}
Esempio n. 3
0
DRESULT disk_ioctl (
	BYTE drv,		/* Physical drive nmuber (0..) */
	BYTE ctrl,		/* Control code */
	void *buff		/* Buffer to send/receive control data */
)
{
    DRESULT res;


    if (drv)
    {    
        return RES_PARERR;  //仅支持单磁盘操作,否则返回参数错误
    }
    
    //FATFS目前版本仅需处理CTRL_SYNC,GET_SECTOR_COUNT,GET_BLOCK_SIZ三个命令
    switch(ctrl)
    {
    case CTRL_SYNC:
        SD_CS_ENABLE();
        if(SD_WaitReady()==0)
        {
            res = RES_OK;
        }
        else
        {
            res = RES_ERROR;
        }
        SD_CS_DISABLE();
        break;
        
    case GET_BLOCK_SIZE:
        *(WORD*)buff = 512;
        res = RES_OK;
        break;

    case GET_SECTOR_COUNT:
        *(DWORD*)buff = SD_GetCapacity();
        res = RES_OK;
        break;
    default:
        res = RES_PARERR;
        break;
    }

    return res;
}
Esempio n. 4
0
DRESULT disk_ioctl (
	BYTE pdrv,		/* Physical drive nmuber (0..) */
	BYTE cmd,		/* Control code */
	void *buff		/* Buffer to send/receive control data */
)
{
	DRESULT res;
	int result;


	switch (cmd) {
	case CTRL_SYNC:		
        SD_CS = 0;
        if(0 == SD_WaitReady())
        {
            res = RES_OK; 
        }
        else 
        {
            res = RES_ERROR;   
        }
        SD_CS = 1;
		break;

    case GET_SECTOR_SIZE:
        *(DWORD*)buff = SD_SECTOR_SIZE;
        res = RES_OK;
    break;        

	case GET_SECTOR_COUNT:
        *(DWORD*)buff = SD_GetSectorCount();
        res = RES_OK;
		break;

	case GET_BLOCK_SIZE:
        *(DWORD*)buff = 8;
        res = RES_OK;
		break;

	default:
		res = RES_PARERR;
	}

	return (res);
}
Esempio n. 5
0
DRESULT disk_ioctl (BYTE drv,BYTE ctrl,void* buff)//哪个盘,控制命令(0刷新缓存,3获取块大小,1获取磁盘容量),块大小和磁盘容量存放的指针
{
    DRESULT res;
    if (drv)
    {    
        return RES_PARERR;  //仅支持单磁盘操作,否则返回参数错误
    }
    
    //FATFS目前版本仅需处理CTRL_SYNC,GET_SECTOR_COUNT,GET_BLOCK_SIZ三个命令
    switch(ctrl)
    {
    case CTRL_SYNC:	//刷新磁盘缓存
   
		SD_CS_ENABLE();
        if(SD_WaitReady()==0)
        {
            res = RES_OK;
        }
        else
        {
            res = RES_ERROR;
        }
       
		SD_CS_DISABLE();
        break;
        
    case GET_BLOCK_SIZE://获取块的大小
        *(WORD*)buff = 512;
        res = RES_OK;
        break;

    case GET_SECTOR_COUNT: //获取磁盘的容量
        *(DWORD*)buff = SD_GetCapacity();
        res = RES_OK;
        break;
    default:
        res = RES_PARERR;
        break;
    }

    return res;
}
Esempio n. 6
0
/**
 *  @name SD_SendBlock
 *	@description 向sd卡写入一个数据包的内容,共512字节
 *	@param 	buf 数据缓存区
			cmd 指令
 *	@return 1 发送成功
			0 发送失败	
 *  @notice
 */
u8 SD_SendBlock(u8 *buf, u8 cmd)
{	
	u16 cnt;
	u8 r1;
	
	if(!SD_WaitReady())
		return 0;	//等待准备失效
	
	SD_SPI_ReadWriteByte(cmd);
	
	if(cmd != 0XFD)//不是结束指令
	{
		for(cnt = 0;cnt < 512;cnt++)
			SD_SPI_ReadWriteByte(buf[cnt]);
	    SD_SPI_ReadWriteByte(0xFF);//忽略crc
	    SD_SPI_ReadWriteByte(0xFF);
		r1 = SD_SPI_ReadWriteByte(0xFF);//接收响应
		if((r1 & 0x1F) != 0x05)
			return 0;	//响应错误									  					    
	}						 									  					    
    return 1;	//写入成功
}
DRESULT disk_ioctl (
	BYTE pdrv,		/* Physical drive nmuber (0..) */
	BYTE cmd,		/* Control code */
	void *buff		/* Buffer to send/receive control data */
)
{
	DRESULT res;						  			     
	if(pdrv==SD_CARD)//SD卡
	{
	    switch(cmd)
	    {
		    case CTRL_SYNC:
			SD_CS_Clr();
		        if(SD_WaitReady()==0)res = RES_OK; 
		        else res = RES_ERROR;	  
			SD_CS_Set();
		        break;	 
		    case GET_SECTOR_SIZE:
		        *(WORD*)buff = 512;
		        res = RES_OK;
		        break;	 
		    case GET_BLOCK_SIZE:
		        *(WORD*)buff = 8;
		        res = RES_OK;
		        break;	 
		    case GET_SECTOR_COUNT:
		        *(DWORD*)buff = SD_GetSectorCount();
		        res = RES_OK;
		        break;
		    default:
		        res = RES_PARERR;
		        break;
	    }
	}else res=RES_ERROR;//其他的不支持
    return res;
}