|
http://www.amobbs.com/forum.php? ... amp;highlight=yaffs
我在S3c2440中移植你的代码。底层驱动有个地方不明白,请教你,希望你多多赐教。谢谢
/************** yaffs 专用函数******************************************
* @brief 读一页数据,连带spear区域
* @param[in] 页编号,*tr 数组参数指针,参数数组数量n_tr
* @return 1正常,-1异常
**********************************************************************/
int8_t NandFlash_RD_Page_With_Spare( uint16_t page_num,struct nanddrv_transfer *tr, int8_t n_tr )
{
uint8_t busy=0;
uint16_t r_cont=0;
if(n_tr < 1)
return -1;
s3c2440_nand_select_chip();
busy=s3c2440_wait_idle();
if(busy==OK)
{
s3c2440_write_cmd(0x00);
rNFADDR = r_addr& 0xff; //读命令开始
rNFADDR =(uint8_t)( tr[0].offset & 0x000000FF);
rNFADDR =(uint8_t)((tr[0].offset & 0x0000FF00) >> 8);
rNFADDR =(uint8_t) ( page_num & 0x000000FF);
rNFADDR =(uint8_t)(( page_num & 0x0000FF00) >> 8);
// WR_CMD =NAND_CMD_READ_2ND; //读命令结束
busy=NandFlash_WaitForReady(); //等待命令完成
if(busy==OK) //读main data
{
for(r_cont=0;r_cont< tr[0].nbytes; r_cont++)
{
tr[0].buffer[r_cont]=RD_DATA;
}
}
if(n_tr==2) //读spare
{
// WR_CMD =NAND_CMD_RANDOM_DATA_OUTPUT_1ST;
WR_ADDR =(uint8_t) ( tr[1].offset & 0x000000FF);
WR_ADDR =(uint8_t)(( tr[1].offset & 0x0000FF00) >> 8);
// WR_CMD =NAND_CMD_RANDOM_DATA_OUTPUT_2ND;
for(r_cont=0;r_cont< tr[1].nbytes; r_cont++)
{
tr[1].buffer[r_cont]=RD_DATA;
}
}
}
NAND_CS_H();
return 1;
}
在底层读和写函数中,标红色的地方写了两次地址,是怎么回事?是同时像两个页读写同样的数据吗?
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|