⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 obj_svcdataflash.c

📁 from wangkj@yahoo.com 电路原理图和详细说明: amd.9966.org或者 arm.9966.org 都是原创,包括boot, loader,u-boot,linu
💻 C
📖 第 1 页 / 共 2 页
字号:
    pSvcDataFlash->DataFlashDesc.rx_data_size = sizeToRead;    pSvcDataFlash->DataFlashDesc.tx_data_pt = dataBuffer;    pSvcDataFlash->DataFlashDesc.tx_data_size = sizeToRead;	/* Send the command to the dataflash */	return(AT91F_DataFlashSendCommand (pSvcDataFlash, DB_CONTINUOUS_ARRAY_READ, 8, src));}//*-----------------------------------------------------------------------------//* Function Name       : AT91F_DataFlashReadBuffer//* Object              : Read the dataflash SRAM Buffer 1 or 2//* Input Parameters    : DataFlash Service//*						: <BufferCommand> = Buffer 1 or 2//*                     : <*dataBuffer> = data buffer pointer//*                     : <SizeToRead> = data buffer size//* Return value		: State of the dataflash//*-----------------------------------------------------------------------------AT91S_SvcDataFlashStatus AT91F_DataFlashReadBuffer (	AT91PS_SvcDataFlash pSvcDataFlash,	u_char BufferCommand,	u_int bufferAddress,	u_char *dataBuffer,	int sizeToRead ){	//* Test if the buffer command is legal	if ((BufferCommand != DB_BUF1_READ) && (BufferCommand != DB_BUF2_READ))		return DATAFLASH_BAD_COMMAND;		//* buffer address must be lower than page size 	if (bufferAddress > pSvcDataFlash->pDevice->pages_size)		return DATAFLASH_BAD_ADDRESS;	if ( (pSvcDataFlash->DataFlashDesc.state) != IDLE)		return DATAFLASH_BUSY;		/*Format the buffer read command  */		pSvcDataFlash->DataFlashDesc.command[0] = BufferCommand;	pSvcDataFlash->DataFlashDesc.command[1] = 0;    pSvcDataFlash->DataFlashDesc.command[2] = (u_char)(((u_int)(bufferAddress & pSvcDataFlash->pDevice->byte_mask)) >> 8) ;    pSvcDataFlash->DataFlashDesc.command[3] = (u_char)((u_int)bufferAddress & 0x00FF) ;	pSvcDataFlash->DataFlashDesc.command[4] = 0;	    pSvcDataFlash->DataFlashDesc.tx_cmd_pt 	 = pSvcDataFlash->DataFlashDesc.command ;    pSvcDataFlash->DataFlashDesc.tx_cmd_size = 5 ;    pSvcDataFlash->DataFlashDesc.rx_cmd_pt 	 = pSvcDataFlash->DataFlashDesc.command ;    pSvcDataFlash->DataFlashDesc.rx_cmd_size = 5 ;    pSvcDataFlash->DataFlashDesc.rx_data_pt	  = dataBuffer ;    pSvcDataFlash->DataFlashDesc.tx_data_pt   = dataBuffer ;    pSvcDataFlash->DataFlashDesc.rx_data_size = sizeToRead ;    pSvcDataFlash->DataFlashDesc.tx_data_size = sizeToRead ;    AT91F_SpiWrite(&(pSvcDataFlash->DataFlashDesc)) ;			return DATAFLASH_OK;}//*-----------------------------------------------------------------------------//* Function Name       : AT91F_MainMemoryToBufferTransfert//* Object              : Read a page in the SRAM Buffer 1 or 2//* Input Parameters    : DataFlash Service//*                     : Page concerned//*                     : //* Return value		: State of the dataflash//*-----------------------------------------------------------------------------AT91S_SvcDataFlashStatus AT91F_MainMemoryToBufferTransfert(		AT91PS_SvcDataFlash pSvcDataFlash,	u_char BufferCommand,	u_int page){ 	//* Test if the buffer command is legal	if ((BufferCommand != DB_PAGE_2_BUF1_TRF) && (BufferCommand != DB_PAGE_2_BUF2_TRF))		return DATAFLASH_BAD_COMMAND;		//* no data to transmit or receive    pSvcDataFlash->DataFlashDesc.tx_data_size = 0;	return(AT91F_DataFlashSendCommand (pSvcDataFlash, BufferCommand, 4, page*pSvcDataFlash->pDevice->pages_size));}/////////////////////////////////////////////////////////////////////////////////////////////	Write Functions/////////////////////////////////////////////////////////////////////////////////////////////*-----------------------------------------------------------------------------//* Function Name       : AT91F_DataFlashPagePgmBuf//* Object              : Main memory page program through buffer 1 or buffer 2//* Input Parameters    : DataFlash Service//*						: <*src> = Source buffer//*                     : <dest> = dataflash destination address//*                     : <SizeToWrite> = data buffer size//* Return value		: State of the dataflash//*-----------------------------------------------------------------------------AT91S_SvcDataFlashStatus AT91F_DataFlashPagePgmBuf(	AT91PS_SvcDataFlash pSvcDataFlash,	u_char BufferCommand,	u_char *src,	u_int dest,	u_int SizeToWrite){	//* Test if the buffer command is legal	if ((BufferCommand != DB_PAGE_PGM_BUF1) && (BufferCommand != DB_PAGE_PGM_BUF2))		return DATAFLASH_BAD_COMMAND;		    pSvcDataFlash->DataFlashDesc.tx_data_pt = src ;    pSvcDataFlash->DataFlashDesc.tx_data_size = SizeToWrite ;    pSvcDataFlash->DataFlashDesc.rx_data_pt = src;    pSvcDataFlash->DataFlashDesc.rx_data_size = SizeToWrite;	/* Send the command to the dataflash */	return(AT91F_DataFlashSendCommand (pSvcDataFlash, BufferCommand, 4, dest));}//*-----------------------------------------------------------------------------//* Function Name       : AT91F_DataFlashWriteBuffer//* Object              : Write data to the internal sram buffer 1 or 2//* Input Parameters    : DataFlash Service//*						: <BufferCommand> = command to write buffer1 or buffer2//*                     : <*dataBuffer> = data buffer to write//*                     : <bufferAddress> = address in the internal buffer//*                     : <SizeToWrite> = data buffer size//* Return value		: State of the dataflash//*-----------------------------------------------------------------------------AT91S_SvcDataFlashStatus AT91F_DataFlashWriteBuffer (	AT91PS_SvcDataFlash pSvcDataFlash,	u_char BufferCommand,	u_char *dataBuffer,	u_int bufferAddress,	int SizeToWrite ){	//* Test if the buffer command is legal	if ((BufferCommand != DB_BUF1_WRITE) && (BufferCommand != DB_BUF2_WRITE))		return DATAFLASH_BAD_COMMAND;			//* buffer address must be lower than page size	if (bufferAddress > pSvcDataFlash->pDevice->pages_size)		return DATAFLASH_BAD_ADDRESS;	if ( (pSvcDataFlash->DataFlashDesc.state)  != IDLE)		return DATAFLASH_BUSY;		    //* Send first Write Command    pSvcDataFlash->DataFlashDesc.command[0] = BufferCommand;	pSvcDataFlash->DataFlashDesc.command[1] = 0;    pSvcDataFlash->DataFlashDesc.command[2] = (u_char)(((u_int)(bufferAddress &  pSvcDataFlash->pDevice->byte_mask)) >> 8) ;    pSvcDataFlash->DataFlashDesc.command[3] = (u_char)((u_int)bufferAddress  & 0x00FF) ;    pSvcDataFlash->DataFlashDesc.tx_cmd_pt 	 = pSvcDataFlash->DataFlashDesc.command ;    pSvcDataFlash->DataFlashDesc.tx_cmd_size = 4 ;    pSvcDataFlash->DataFlashDesc.rx_cmd_pt 	 = pSvcDataFlash->DataFlashDesc.command ;    pSvcDataFlash->DataFlashDesc.rx_cmd_size = 4 ;    pSvcDataFlash->DataFlashDesc.rx_data_pt 	= dataBuffer ;    pSvcDataFlash->DataFlashDesc.tx_data_pt 	= dataBuffer ;    pSvcDataFlash->DataFlashDesc.rx_data_size 	= SizeToWrite ;    pSvcDataFlash->DataFlashDesc.tx_data_size 	= SizeToWrite ;    AT91F_SpiWrite( &pSvcDataFlash->DataFlashDesc );	return DATAFLASH_OK;}//*-----------------------------------------------------------------------------//* Function Name       : AT91F_WriteBufferToMain//* Object              : Write buffer to the main memory//* Input Parameters    : DataFlash Service//*						: <BufferCommand> = command to send to buffer1 or buffer2//*                     : <dest> = main memory address//* Return value		: State of the dataflash//*-----------------------------------------------------------------------------AT91S_SvcDataFlashStatus AT91F_WriteBufferToMain (		AT91PS_SvcDataFlash pSvcDataFlash,	u_char BufferCommand,	u_int dest ){	//* Test if the buffer command is correct	if ((BufferCommand != DB_BUF1_PAGE_PGM) &&		(BufferCommand != DB_BUF1_PAGE_ERASE_PGM) &&		(BufferCommand != DB_BUF2_PAGE_PGM) &&		(BufferCommand != DB_BUF2_PAGE_ERASE_PGM) )		return DATAFLASH_BAD_COMMAND;			//* no data to transmit or receive    pSvcDataFlash->DataFlashDesc.tx_data_size = 0;		/* Send the command to the dataflash */	return(AT91F_DataFlashSendCommand (pSvcDataFlash, BufferCommand, 4, dest));}/////////////////////////////////////////////////////////////////////////////////////////////	Erase Functions/////////////////////////////////////////////////////////////////////////////////////////////*-----------------------------------------------------------------------------//* Function Name       : AT91F_PageErase//* Object              : Erase a page in dataflash//* Input Parameters    : DataFlash Service//*						: <PageNumber> = Number of the page to erase//*                     : //* Return value		: State of the dataflash//*-----------------------------------------------------------------------------AT91S_SvcDataFlashStatus AT91F_PageErase (		AT91PS_SvcDataFlash pSvcDataFlash,	u_int PageNumber){    pSvcDataFlash->DataFlashDesc.tx_data_size = 0;		/* Send the command to the dataflash */	return(AT91F_DataFlashSendCommand (pSvcDataFlash, DB_PAGE_ERASE, 4, PageNumber*pSvcDataFlash->pDevice->pages_size));}//*-----------------------------------------------------------------------------//* Function Name       : AT91F_BlockErase//* Object              : Erase a block of 8 pages//* Input Parameters    : DataFlash Service//*						: <BlockNumber> = number of the block to erase//*                     : //* Return value		: State of the dataflash//*-----------------------------------------------------------------------------AT91S_SvcDataFlashStatus AT91F_BlockErase (		AT91PS_SvcDataFlash pSvcDataFlash,	u_int BlockNumber ){    pSvcDataFlash->DataFlashDesc.tx_data_size = 0;		/* Send the command to the dataflash */	return(AT91F_DataFlashSendCommand (pSvcDataFlash, DB_BLOCK_ERASE, 4, BlockNumber*8*pSvcDataFlash->pDevice->pages_size));}/////////////////////////////////////////////////////////////////////////////////////////////	Compare Functions/////////////////////////////////////////////////////////////////////////////////////////////*-----------------------------------------------------------------------------//* Function Name       : AT91F_MainMemoryToBufferCompare//* Object              : Compare the contents of a page and one of the sram buffer//* Input Parameters    : DataFlash Service//*						: <BufferCommand> :specify the sram buffer to compare//*                     : <page> : specify the page to compare//*						: then after that operation, check the 6th bit of the status register//* Return value		: State of the dataflash//*-----------------------------------------------------------------------------AT91S_SvcDataFlashStatus AT91F_MainMemoryToBufferCompare(		AT91PS_SvcDataFlash pSvcDataFlash,	u_char BufferCommand,	u_int page){	//* Test if the buffer command is legal	if ((BufferCommand != DB_PAGE_2_BUF1_CMP ) && (BufferCommand != DB_PAGE_2_BUF2_CMP ))		return DATAFLASH_BAD_COMMAND;			//* no data to transmit or receive    pSvcDataFlash->DataFlashDesc.tx_data_size = 0;	return(AT91F_DataFlashSendCommand (pSvcDataFlash, BufferCommand, 4, page*pSvcDataFlash->pDevice->pages_size));		}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -