搜索
bottom↓
回复: 7

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

[复制链接]

出0入10汤圆

发表于 2014-5-5 21:05:12 | 显示全部楼层 |阅读模式
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, 杜汶泽)

出0入22汤圆

发表于 2014-5-5 22:55:23 | 显示全部楼层
地址写几次可以看nand手册

出0入10汤圆

 楼主| 发表于 2014-5-6 09:03:51 | 显示全部楼层
jiaowoxiaolu 发表于 2014-5-5 22:55
地址写几次可以看nand手册

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

出0入22汤圆

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

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

出0入10汤圆

 楼主| 发表于 2014-5-6 09:14:05 | 显示全部楼层
非常感谢。我对照你的数据手册明白了点。谢谢

出0入0汤圆

发表于 2014-5-6 09:31:24 | 显示全部楼层
                                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);
找份nand datasheet 看架构你会很清楚的.

出0入10汤圆

 楼主| 发表于 2014-5-7 21:57:54 | 显示全部楼层
mcuprogram 发表于 2014-5-6 09:31
rNFADDR        =(uint8_t)( tr[0].offset & 0x000000FF);               ...

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

出0入10汤圆

 楼主| 发表于 2014-5-7 21:59:00 | 显示全部楼层
jiaowoxiaolu 发表于 2014-5-5 22:55
地址写几次可以看nand手册

我移植编译通过了,是不是用dtest.c里的函数进行测试?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 09:34

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表