📄 nand.c
字号:
__COMMAND = K9FXX_BLOCK_PROGRAM_1; /* 页编程指令1,为80H */
__ADDR = uiCol; /* 一字节列地址 */
__ADDR = (uint8)(uiRow & 0xff); /* 两字节的行地址 */
__ADDR = (uint8)((uiRow >> 8) & 0xff);
i = uiNum;
do { /* 写入数据 */
__DATA = *pucStr++;
} while(--i != 0);
__COMMAND = K9FXX_BLOCK_PROGRAM_2; /* 页编程指令2,为10H */
return nandOK(); /* 返回编程结果 */
}
/*********************************************************************************************************
** Function name: nandSectorCProgram
**
** Descriptions: 编程芯片C区
**
**
** input parameters: pucBuf: 指向要存数据的指针,大小必须>=16字节
** uiCoL : 以列地址的索引
uiRow : 以页面为单位的索引
uiCNum : 写入的字节数
** 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区指令50H */
__COMMAND = K9FXX_BLOCK_PROGRAM_1; /* 编程页操作空闲区(C)的指令80H */
__ADDR = uiCol; /* 一字节列地址 */
__ADDR = (uint8)(uiRow & 0xff); /* 两字节的行地址 */
__ADDR = (uint8)((uiRow >> 8) & 0xff);
i = uiCNum;
do {
__DATA = *pucBuf++; /* 写入数据 */
} while(--i != 0);
__COMMAND = K9FXX_BLOCK_PROGRAM_2; /* 页编程指令2,为10H */
return nandOK(); /* 返回编程结果 */
}
/*********************************************************************************************************
** 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; /* 两字节的行地址 */
temp = (uint8)((uiRow >> 8) & 0xff);
__ADDR = temp;
__COMMAND = K9FXX_BLOCK_ERASE_2; /* 块擦除操作指令2,为D0H */
return nandOK(); /* 返回块擦除结果 */
}
/*********************************************************************************************************
** 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; /* 一个字节的地址,为00H */
ucA = __DATA; /* 读芯片ID */
ucB = __DATA;
return (uint16)((ucA << 8) | ucB);
}
/*********************************************************************************************************
** Function name: nandSectorCheck
**
** Descriptions: 校验扇区数据
**
**
** input parameters: pucBuf: 要校验的数据,大小必须>=512字节
** uiCoL : 以列地址的索引
uiRow : 以页面为单位的索引
uiNum : 写入的字节数
** Returned value: TURE: 数据正确
** FALSE:数据错误
**
** 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区数据
**
**
** input parameters: pucBuf: 要校验的数据,大小必须>=16字节
** uiCoL : 以列地址的索引
uiRow : 以页面为单位的索引
uiCNum : 写入的字节数
** Returned value: TURE: 数据正确
** FALSE:数据错误
**
** 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
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -