?? nand.c
字號:
__COMMAND = K9FXX_BLOCK_PROGRAM_1; /* 頁編程指令1,為80H */
__ADDR = uiCol; /* 一字節(jié)列地址 */
__ADDR = (uint8)(uiRow & 0xff); /* 兩字節(jié)的行地址 */
__ADDR = (uint8)((uiRow >> 8) & 0xff);
i = uiNum;
do { /* 寫入數(shù)據(jù) */
__DATA = *pucStr++;
} while(--i != 0);
__COMMAND = K9FXX_BLOCK_PROGRAM_2; /* 頁編程指令2,為10H */
return nandOK(); /* 返回編程結(jié)果 */
}
/*********************************************************************************************************
** Function name: nandSectorCProgram
**
** Descriptions: 編程芯片C區(qū)
**
**
** input parameters: pucBuf: 指向要存數(shù)據(jù)的指針,大小必須>=16字節(jié)
** uiCoL : 以列地址的索引
uiRow : 以頁面為單位的索引
uiCNum : 寫入的字節(jié)數(shù)
** Returned value: TURE: 成功
** FALSE: 失敗
** Created by: 楊市平
** Created Date: 2008/03/18
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 nandSectorCProgram (uint8 *pucBuf, uint32 uiCol, uint8 uiRow, uint32 uiCNum)
{
uint32 i;
__COMMAND = K9FXX_SET_ADDR_C; /* 定位到C區(qū)指令50H */
__COMMAND = K9FXX_BLOCK_PROGRAM_1; /* 編程頁操作空閑區(qū)(C)的指令80H */
__ADDR = uiCol; /* 一字節(jié)列地址 */
__ADDR = (uint8)(uiRow & 0xff); /* 兩字節(jié)的行地址 */
__ADDR = (uint8)((uiRow >> 8) & 0xff);
i = uiCNum;
do {
__DATA = *pucBuf++; /* 寫入數(shù)據(jù) */
} while(--i != 0);
__COMMAND = K9FXX_BLOCK_PROGRAM_2; /* 頁編程指令2,為10H */
return nandOK(); /* 返回編程結(jié)果 */
}
/*********************************************************************************************************
** Function name: nandBlockErase
**
** Descriptions: 塊擦除
**
**
** input parameters: uiRow : 以頁面為單位的索引
**
** Returned value: TURE: 成功
** FALSE: 失敗
** Created by: 楊市平
** Created Date: 2008/03/18
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 nandBlockErase (uint32 uiRow)
{
uint8 temp;
__COMMAND = K9FXX_BLOCK_ERASE_1; /* 塊擦除操作指令1,為60H */
temp = (uint8)(uiRow & 0xff);
__ADDR = temp; /* 兩字節(jié)的行地址 */
temp = (uint8)((uiRow >> 8) & 0xff);
__ADDR = temp;
__COMMAND = K9FXX_BLOCK_ERASE_2; /* 塊擦除操作指令2,為D0H */
return nandOK(); /* 返回塊擦除結(jié)果 */
}
/*********************************************************************************************************
** Function name: nandReadID
**
** Descriptions: 讀芯片ID
**
**
** input parameters: 無
**
** Returned value: 芯片的ID號
**
** Created by: 楊市平
** Created Date: 2008/03/18
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint16 nandReadID (void)
{
uint8 ucA, ucB;
__COMMAND = K9FXX_READ_ID; /* 讀芯片ID指令,為90H */
__ADDR = 0x00; /* 一個字節(jié)的地址,為00H */
ucA = __DATA; /* 讀芯片ID */
ucB = __DATA;
return (uint16)((ucA << 8) | ucB);
}
/*********************************************************************************************************
** Function name: nandSectorCheck
**
** Descriptions: 校驗扇區(qū)數(shù)據(jù)
**
**
** input parameters: pucBuf: 要校驗的數(shù)據(jù),大小必須>=512字節(jié)
** uiCoL : 以列地址的索引
uiRow : 以頁面為單位的索引
uiNum : 寫入的字節(jié)數(shù)
** Returned value: TURE: 數(shù)據(jù)正確
** FALSE:數(shù)據(jù)錯誤
**
** Created by: 楊市平
** Created Date: 2008/03/18
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 nandSectorCheck (uint8 *pucBuf, uint32 uiCol, uint8 uiRow, uint32 uiNum)
{
uint32 i;
__COMMAND = K9FXX_SET_ADDR_A;
__ADDR = uiCol;
__ADDR = (uint8)(uiRow & 0xff);
__ADDR = (uint8)((uiRow >> 8) & 0xff);
while (1) {
if ((nandReadStatus() & K9FXX_BUSY) != 0) {
break;
}
}
__COMMAND = K9FXX_SET_ADDR_A;
i = uiNum;
do {
if (*pucBuf++ != __DATA) {
return FALSE;
}
} while(--i != 0);
return TRUE;
}
/*********************************************************************************************************
** Function name: nandSectorCCheck
**
** Descriptions: 校驗C區(qū)數(shù)據(jù)
**
**
** input parameters: pucBuf: 要校驗的數(shù)據(jù),大小必須>=16字節(jié)
** uiCoL : 以列地址的索引
uiRow : 以頁面為單位的索引
uiCNum : 寫入的字節(jié)數(shù)
** Returned value: TURE: 數(shù)據(jù)正確
** FALSE:數(shù)據(jù)錯誤
**
** Created by: 楊市平
** Created Date: 2008/03/18
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 nandSectorCCheck (uint8 *pucBuf, uint32 uiCol, uint8 uiRow, uint32 uiCNum)
{
uint32 i;
__COMMAND = K9FXX_SET_ADDR_C;
__ADDR = uiCol;
__ADDR = (uint8)(uiRow & 0xff);
__ADDR = (uint8)((uiRow >> 8) & 0xff);
while (1) {
if ((nandReadStatus() & K9FXX_BUSY) != 0) {
break;
}
}
__COMMAND = K9FXX_SET_ADDR_C;
i = uiCNum;
do {
if (*pucBuf++ != __DATA) {
return FALSE;
}
} while(--i != 0);
return TRUE;
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -