加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

FL2440的U-boot-2010.09移植(四) 添加NOR Flash启动支持

发布时间:2020-12-15 07:18:36 所属栏目:百科 来源:网络整理
导读:? ? ? ? ?我们知道S3C2440支持从NAND Flash启动和从NOR Flash启动两种模式,先来介绍u-boot的NOR Flash启动方式吧。 一、修改NOR Flash的读写程序 ??????? FL2440开发板中使用的NOR Flash是Intel的J3系列存储大小是4M字节,这个系列的NOR Flash支持标准的CFI

? ? ? ? ?我们知道S3C2440支持从NAND Flash启动和从NOR Flash启动两种模式,先来介绍u-boot的NOR Flash启动方式吧。

一、修改NOR Flash的读写程序

??????? FL2440开发板中使用的NOR Flash是Intel的J3系列存储大小是4M字节,这个系列的NOR Flash支持标准的CFI指令(在最新的U-boot版本中只需要添加宏定义就可以支持CFI接口的NOR Flash了,但我们这个版本中还不行),将board/cmi/flash.c复制到board/fl2440/flash.c,这个文件中包含了我们开发板的NOR Flash读写函数,但是其中还有一点问题,需要修改flash.c文件中的函数write_buff,此函数需要将小端字节数进行short类型变换,即将低地址数放在低位,高地址数放在高位另外还要进行地址对其,因为该型号flash只支持16位写,不支持8位写,那么我们写8位时需要从flash中读取出不改写8位,在加上需要改写的8位组成16位后回写到flash中去,具体将原flash.c中的函数write_buff修改如下:

[cpp]? view plain copy
  1. int?write_buff?(flash_info_t?*info,?uchar?*src,?ulong?addr,?ulong?cnt)??
  2. {??
  3. ????ulong?cp,?wp;??
  4. ????ushort?data;??
  5. ????int?i,?rc;??
  6. ??
  7. ????if?(info->flash_id?==?FLASH_UNKNOWN)?{??
  8. ????????return?4;??
  9. ????}??
  10. ????wp?=?(addr?&?~1);???/*?get?lower?word?aligned?address?*/??
  11. ????/*?
  12. ?????*?handle?unaligned?start?byte?
  13. ?????*/??
  14. ???????/*?for?not?to?modify?the?origin?data?in?flash*/??
  15. if?(addr?-?wp)?{??
  16. ????????data?=?0;??
  17. ????????????????for(i?=?0,?cp?=?wp;?i?<?1;?++i,?++cp){??
  18. ???????????????????data?=?(data?>>?8)?|?(*(uchar?*)?cp?<<?8);??
  19. ????????????????}??
  20. ????????????????for(;?i?<?2?&&?cnt?>?0;?++i){??
  21. ????????data?=?(data?>>?8)?|?(*src++?<<8);??
  22. ????????--cnt;??
  23. ????????????????++cp;??
  24. ????????????????}???
  25. for(;?cnt?==?0?&&?i?<?2;?++i,248); line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> ????????????????data?=?(data?>>?8)?|?(*(uchar?*)?cp?<<?8);??
  26. if?((rc?=?write_short(info,?wp,?data))?!=?0)?{??
  27. ????????????return?(rc);??
  28. ????????}??
  29. ????????wp?+=?2;??
  30. ????}??
  31. ??
  32. ????/*?
  33. ?????*?handle?word?aligned?part?
  34. ?????*/??
  35. ????while?(cnt?>=?2)?{??
  36. ????????/*data?=?0;?
  37. ????????for?(i=0;?i<2;?++i)?{?
  38. ????????????data?=?(data?<<?8)?|?*src++;?
  39. ????????}*/??
  40. ????????????????data?=?*((vu_short?*)?src)?;??
  41. ???????? ????????????return?(rc);??
  42. ????????}??
  43. ????????????????src?+=?2;??
  44. ????????wp??+=?2;??
  45. ????????cnt?-=?2;??
  46. if?(cnt?==?0)?{??
  47. return?(0);??
  48. ?????*?handle?unaligned?tail?bytes?
  49. ?????????*?read?the?origin?high?byte?data?and?write?again!?
  50. ?????????*?modified?by?yanghao?
  51. ????data?=?0;??
  52. for?(i=0,?cp=wp;?i<2?&&?cnt>0;?++i,?++cp)?{??
  53. ????????data?=?(data?>>?8)?|?(*src++?<<?8);??
  54. for?(;?i<2;?++i,108); list-style:decimal-leading-zero outside; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> ????????data?=?(data?>>?8)?|?(*(uchar?*)cp?<<?8);??
  55. return?(write_short(info,?data));??
  56. }??

还需要将flash.c文件中的NOR Flash块大小进行修改:

copy
    #define?FLASH_BLOCK_SIZE??0x00020000???????<span?style="font-family:Times?New?Roman;font-size:16px;">//</span>数据手册<span?style="font-family:Times?New?Roman;">p8</span>说了<span?style="font-family:Times?New?Roman;">32Mbit</span>有<span?style="font-family:Times?New?Roman;">32</span>个<span?style="font-family:Times?New?Roman;">128kBytes?block</span>组成??

二、修改开发板头文件中的宏定义

为了添加对NOR Flash启动的支持,还需要在include/configs/fl2440.h头文件中添加对NOR Flash的信息描述和支持,将fl2440.h文件中159行附近:

copy
    #define?CONFIG_AMD_LV400????1???/*?uncomment?this?if?you?have?a?LV400?flash?*/??
  1. #if?0??
  2. #define?CONFIG_AMD_LV800????1???/*?uncomment?this?if?you?have?a?LV800?flash?*/??
  3. #endif??
  4. #define?CONFIG_SYS_MAX_FLASH_BANKS??1???/*?max?number?of?memory?banks?*/??
  5. #ifdef?CONFIG_AMD_LV800??
  6. #define?PHYS_FLASH_SIZE?????0x00100000?/*?1MB?*/??
  7. #define?CONFIG_SYS_MAX_FLASH_SECT???(19)????/*?max?number?of?sectors?on?one?chip?*/??
  8. #define?CONFIG_ENV_ADDR?????(CONFIG_SYS_FLASH_BASE?+?0x0F0000)?/*?addr?of?environment?*/??
  9. #endif??
  10. #ifdef?CONFIG_AMD_LV400??
  11. #define?PHYS_FLASH_SIZE?????0x00080000?/*?512KB?*/??
  12. #define?CONFIG_SYS_MAX_FLASH_SECT???(11)????/*?max?number?of?sectors?on?one?chip?*/??
  13. #define?CONFIG_ENV_ADDR?????(CONFIG_SYS_FLASH_BASE?+?0x070000)?/*?addr?of?environment?*/??
  14. #endif??

全部删除,并修改为:

copy
    #define?CONFIG_SYS_MAX_FLASH_BANKS??1???/*?max?number?of?memory?banks?*/??
  1. #ifdef?CONFIG_FL2440??
  2. #define?PHYS_FLASH_SIZE?????0x00400000?/*?4MB?*/??
  3. #define?CONFIG_SYS_MAX_FLASH_SECT???(32)????/*?max?number?of?sectors?on?one?chip?*/??
  4. #define?CONFIG_ENV_ADDR?????(CONFIG_SYS_FLASH_BASE?+?0x0F0000)?/*?addr?of?environment?*/??
  5. #define?CONFIG_SYS_MONITOR_BASE??TEXT_BASE??/*CMI/flash.c?need*/??
  6. #define?FLASH_BASE0_PRELIM??????PHYS_FLASH_1??????/*CMI/flash.c?need*/??
  7. 并将文件中

    copy
      #define?CONFIG_ENV_SIZE??0x10000?/*?Total?Size?of?Environment???

    修改为:

    copy
      #define?CONFIG_ENV_SIZE??0x20000?/*?Total?Size?of?Environment???

    再执行make,生成的u-boot.bin就可以烧写入NOR Flash中了(可以使用JLINK软件包中的JFlash来完成烧写过程),设置开发板启动方式为NOR Flash启动,再次上电启动NOR Flash就完成u-boot的启动了。

    (编辑:李大同)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读