/*******************************************************************************
* Function Name  : MSD_WriteMultiBlock
* Description    : None
* Input          : - sector:
*				   - buffer:
*                  - NbrOfSector:
* Output         : None
* Return         : None
* Attention		 : None
*******************************************************************************/
uint8 AppSdWriteBytesInBlk(uint32 BlkAddr, uint32 OffsetAddr, uint32 InBlkByteNum, uint8 *DataBuf)
{
    uint32 sector = BlkAddr;

    if((OffsetAddr + InBlkByteNum) > MSD_BLOCKSIZE)  					//写范围不能垮块
    {
        while(1);
    }

    if(OffsetAddr == 0 && InBlkByteNum == MSD_BLOCKSIZE)					//写一整块
    {
        if(MSD_WriteSingleBlock(sector, DataBuf) != 0)
        {
            return FALSE;
        }
    }
    else  															//写块的一部分
    {
        if(MSD_ReadSingleBlock(sector, gSdRWBuf) != 0)
        {
            return FALSE;
        }

        memcpy(&gSdRWBuf[OffsetAddr], DataBuf, InBlkByteNum);

        if(MSD_WriteSingleBlock(sector, gSdRWBuf) != 0)
        {
            return FALSE;
        }
    }

    return TRUE;
}
示例#2
0
DRESULT disk_write (
	BYTE drv,			/* Physical drive nmuber (0..) */
	const BYTE *buff,	        /* Data to be written */
	DWORD sector,		/* Sector address (LBA) */
	BYTE count			/* Number of sectors to write (1..255) */
)
{
  int Status;
  if( !count )
  {    
    return RES_PARERR;  /* count不能等于0,否则返回参数错误 */
  }

  switch (drv)
  {
    case 0:
    if(count==1)            /* 1个sector的写操作 */      
    {   
       Status = MSD_WriteSingleBlock( sector , (uint8_t *)(&buff[0]) ); 
    }                                                
    else                    /* 多个sector的写操作 */    
    {   
       Status = MSD_WriteMultiBlock( sector , (uint8_t *)(&buff[0]) , count );	  
    }                                                
    if(Status == 0)
    {
       return RES_OK;
    }
    else
    {
       return RES_ERROR;
    }
    case 2:
	   break;
    default :
       break;
  }
 return RES_ERROR;
}