S3C2440之NAND FLASH移植到S3C2410的驱动分析

发布时间:2024-06-11  

S3C2440A的NAND FLASH驱动移植到S3C2410还是有些不一样的,最主要的这两个IC的NAND FLASH的寄存器有些不一样,请看下面的两者之间不同:

  1. //   

  2. // Copyright (c) Microsoft Corporation.  All rights reserved.   

  3. //   

  4. //   

  5. // Use of this source code is subject to the terms of the Microsoft end-user   

  6. // license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.   

  7. // If you did not accept the terms of the EULA, you are not authorized to use   

  8. // this source code. For a copy of the EULA, please see the LICENSE.RTF on your   

  9. // install media.   

  10. //   

  11. //------------------------------------------------------------------------------   

  12. //   

  13. //  Header: s3c2410x_nand.h   

  14. //   

  15. //  Defines the NAND controller CPU register layout and definitions.   

  16. //   

  17. #ifndef __S3C2410X_NAND_H   

  18. #define __S3C2410X_NAND_H   

  19.   

  20. #if __cplusplus   

  21.     extern "C"   

  22.     {  

  23. #endif   

  24.   

  25.   

  26. //------------------------------------------------------------------------------   

  27. //  Type: S3C2410X_NAND_REG       

  28. //   

  29. //  NAND Flash controller register layout. This register bank is located    

  30. //  by the constant CPU_BASE_REG_XX_NAND in the configuration file    

  31. //  cpu_base_reg_cfg.h.   

  32. //   

  33.   

  34. typedef struct    

  35. {  

  36.     UINT32  NFCONF;             // configuration reg   

  37.     UINT8   NFCMD;              // command set reg   

  38.     UINT8   pad1[3];            // pad    

  39.     UINT8   NFADDR;             // address set reg   

  40.     UINT8   pad2[3];            // pad    

  41.     UINT8   NFDATA;             // data reg   

  42.     UINT8   pad3[3];            // pad   

  43.     UINT32  NFSTAT;             // operation status reg   

  44.     UINT32  NFECC;             // error correction code 0   

  45.   

  46. } S3C2410X_NAND_REG, *PS3C2410X_NAND_REG;      

  47.   

  48.   

  49. #if __cplusplus   

  50.     }  

  51. #endif   

  52.   

  53. #endif   

上面的代码是S3C2410A的寄存器,我们在看看S3C2440A的寄存器地址说明:

  1. //   

  2. // Copyright (c) Microsoft Corporation.  All rights reserved.   

  3. //   

  4. //   

  5. // Use of this source code is subject to the terms of the Microsoft end-user   

  6. // license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.   

  7. // If you did not accept the terms of the EULA, you are not authorized to use   

  8. // this source code. For a copy of the EULA, please see the LICENSE.RTF on your   

  9. // install media.   

  10. //   

  11. //------------------------------------------------------------------------------   

  12. //   

  13. //  Header: s3c2440a_nand.h   

  14. //   

  15. //  Defines the NAND controller CPU register layout and definitions.   

  16. //   

  17. #ifndef __S3C2440A_NAND_H   

  18. #define __S3C2440A_NAND_H   

  19.   

  20. #if __cplusplus   

  21.     extern "C"   

  22.     {  

  23. #endif   

  24.   

  25.   

  26. //------------------------------------------------------------------------------   

  27. //  Type: S3C2440A_NAND_REG       

  28. //   

  29. //  NAND Flash controller register layout. This register bank is located    

  30. //  by the constant CPU_BASE_REG_XX_NAND in the configuration file    

  31. //  cpu_base_reg_cfg.h.   

  32. //   

  33.   

  34. typedef struct    

  35. {  

  36.     UINT32  NFCONF;             // configuration reg   

  37.     UINT32  NFCONT;  

  38.     UINT8   NFCMD;              // command set reg   

  39.     UINT8   d0[3];  

  40.     UINT8   NFADDR;             // address set reg   

  41.     UINT8   d1[3];  

  42.     UINT8   NFDATA;             // data reg   

  43.     UINT8   d2[3];  

  44.     UINT32  NFMECCD0;  

  45.     UINT32  NFMECCD1;  

  46.     UINT32  NFSECCD;      

  47.     UINT32  NFSTAT;             // operation status reg   

  48.     UINT32  NFESTAT0;  

  49.     UINT32  NFESTAT1;  

  50.     UINT32  NFMECC0;             // error correction code 0   

  51.     UINT32  NFMECC1;             // error correction code 1   

  52.     UINT32  NFSECC;  

  53.     UINT32  NFSBLK;  

  54.     UINT32  NFEBLK;             // error correction code 2   

  55.   

  56. } S3C2440A_NAND_REG, *PS3C2440A_NAND_REG;      

  57.   

  58.   

  59. #if __cplusplus   

  60.     }  

  61. #endif   

  62.   

  63. #endif   

这两者之间的差别是很大的。因此移植起来的难点主要是ECC部分,同时还有个别寄存器位地址不一样,需要修改,见下面:

  1. //  Use Macros here to avoid extra over head for c function calls   

  2. #define READ_REGISTER_BYTE(p)       (*(PBYTE)(p))   

  3. #define WRITE_REGISTER_BYTE(p, v)   (*(PBYTE)(p)) = (v)   

  4. #define READ_REGISTER_USHORT(p)     (*(PUSHORT)(p))   

  5. #define WRITE_REGISTER_USHORT(p, v) (*(PUSHORT)(p)) = (v)   

  6. #define READ_REGISTER_ULONG(p)      (*(PULONG)(p))   

  7. #define WRITE_REGISTER_ULONG(p, v)  (*(PULONG)(p)) = (v)  

以上的代码不论S3C2410还是S3C2440都可以用,我在移植的时候,这两部是一样的。当然至于S3C2443和S3C2450这部分的寄存器改变并不多,不过S3C2450的BSP中NAND FLASH驱动还是有很大的变化,那以后再来分析吧,现在还是分析这个,WINCE5.0下的。WINCE6.0的我还没有来得急移植呢。我一般喜欢动手自己移植一遍,这样能深入的了解WINCE的流程,同时对这颗IC,也更熟悉。看看两者之间的不同吧。


S3C2440A的寄存器宏定义:

  1. //  MACROS   

  2. #define NF_CE_L()           WRITE_REGISTER_USHORT(pNFCONT, (USHORT) (READ_REGISTER_USHORT(pNFCONT) & ~(1<<1)))   

文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>