硬邦邦 发表于 2014-5-5 21:05:12

移值:还在玩fatfs?换点口味吧!jiaowoxiaolu有个问题要请教。

http://www.amobbs.com/forum.php?mod=viewthread&tid=5535279&highlight=yaffs

我在S3c2440中移植你的代码。底层驱动有个地方不明白,请教你,希望你多多赐教。谢谢

/************** yaffs 专用函数******************************************

* @brief                 读一页数据,连带spear区域   
* @param        页编号,*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_tr_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.offset & 0x000000FF);                                                                                                       
                                rNFADDR        =(uint8_t)((tr.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.nbytes; r_cont++)
                                                {
                                                        tr.buffer=RD_DATA;
                                                }
                                }       
                                if(n_tr==2)                                                                                                        //读spare
                                {
//                                        WR_CMD        =NAND_CMD_RANDOM_DATA_OUTPUT_1ST;               
                                        WR_ADDR        =(uint8_t) ( tr.offset & 0x000000FF);
                                        WR_ADDR        =(uint8_t)(( tr.offset & 0x0000FF00) >> 8);
//                                        WR_CMD        =NAND_CMD_RANDOM_DATA_OUTPUT_2ND;
                                        for(r_cont=0;r_cont< tr.nbytes; r_cont++)
                                        {
                                                        tr.buffer=RD_DATA;
                                        }                                                                       
                                }                                       
                }                       
                NAND_CS_H();

        return 1;
}

在底层读和写函数中,标红色的地方写了两次地址,是怎么回事?是同时像两个页读写同样的数据吗?

jiaowoxiaolu 发表于 2014-5-5 22:55:23

地址写几次可以看nand手册

硬邦邦 发表于 2014-5-6 09:03:51

jiaowoxiaolu 发表于 2014-5-5 22:55
地址写几次可以看nand手册

非常感谢你的回复,可能我问的问题不是很对,你用的NAND是写四次,前两次是写入一页中的第几个字节吗?后两次写入是整片中的第几页吗?

jiaowoxiaolu 发表于 2014-5-6 09:06:28

硬邦邦 发表于 2014-5-6 09:03
非常感谢你的回复,可能我问的问题不是很对,你用的NAND是写四次,前两次是写入一页中的第几个字节吗?后 ...

要先找到第几页然后再找到这页内想要的哪一个字节,具体先发什么要查看nand手册,里面有地址周期说明

硬邦邦 发表于 2014-5-6 09:14:05

非常感谢。我对照你的数据手册明白了点。谢谢

mcuprogram 发表于 2014-5-6 09:31:24

                              rNFADDR      =(uint8_t)( tr.offset & 0x000000FF);                                                                                                      
                              rNFADDR      =(uint8_t)((tr.offset & 0x0000FF00) >> 8);
                              rNFADDR      =(uint8_t) ( page_num & 0x000000FF);
                              rNFADDR      =(uint8_t)(( page_num & 0x0000FF00) >> 8);
找份nand datasheet 看架构你会很清楚的.

硬邦邦 发表于 2014-5-7 21:57:54

mcuprogram 发表于 2014-5-6 09:31
rNFADDR      =(uint8_t)( tr.offset & 0x000000FF);               ...

谢谢回复,看明白了,英文能力需要提高,所以慢慢啃

硬邦邦 发表于 2014-5-7 21:59:00

jiaowoxiaolu 发表于 2014-5-5 22:55
地址写几次可以看nand手册

我移植编译通过了,是不是用dtest.c里的函数进行测试?
页: [1]
查看完整版本: 移值:还在玩fatfs?换点口味吧!jiaowoxiaolu有个问题要请教。