查看: 1767|回复: 1

NXP S08P-Lite开发板 试用活动(8)flash驱动分享

[复制链接]
  • TA的每日心情
    开心
    2019-1-15 15:24
  • 签到天数: 164 天

    连续签到: 2 天

    [LV.7]常住居民III

    发表于 2018-12-9 16:14:33 | 显示全部楼层 |阅读模式
    分享到:

    在上一节介绍了自制OSBDM,本节介绍如何使用内部flash存储数据,对于S08来说,往往我们做产品时需要存储部分参数,为了节约成本,我们喜欢使用内部flash来替代外部的spi flash和eeprom,对于NXP S08P-Lite的驱动demo中并没有给出相应的flash驱动代码,对于新手来说,感觉自己编写是有些难度,那么我们改怎么做呢?不要担心,当然有方法,对于S08PT60来说,其flash的驱动代码是有的,后面再附件中下载即可,我介绍如何使用flash驱动例子。

    1.png

    我们只需要把这个驱动拷贝到我们之前的demo框架即可。

    对于这个flash驱动demo,是一个驱动测试框架,我们可以测试各个功能。

    1. #define MAX_NO_DATA                                (UIF_MAX_ARGS-2)
    2. #define FLASH_USER_PARAM_ADDR        0xFC00
    3. #define EEPROM_USER_PARAM_ADDR        0x3100

    4. const char BANNER0[] = "\n*********************************\n";
    5. const char BANNER1[] = "\nWelcome to PT60 Flash/EEPROM Lab!\n";
    6. const char BANNER2[] = "\n*********************************\n";
    7. const char BANNER3[] = "Please use recommended address to play with:\n" \
    8.                                "  flash address = %#04.4x\n  EEPROM address = %#04.4x\n";
    9.         
    10. const char PROMPT[] = "CMD> ";
    11. UIF_CMD UIF_CMDTAB[] =
    12. {
    13.         UIF_CMD_HELP
    14.     {"ev_fb",0,1,0,cmd_eraseverify_flash_block, "EraseVerify flash block","<address in hex>"},
    15.     {"ev_eep",0,1,0,cmd_eraseverify_eeprom_block,"EraseVerify EEPROM block","<address in hex>"},
    16.     {"ev_fs",0,2,0,cmd_eraseverify_flash_section,"EraseVerify flash  section","<address in hex> <# of longwords>"},
    17.     {"ev_eeps",0,2,0,cmd_eraseverify_eeprom_section, "EraseVerify EEPROM  section","<address in hex> <# of bytes>"},
    18.     {"ev_all",0,0,0,cmd_eraseverify_all, "EraseVerify all blocks",""},
    19.     {"pg_eep",0,MAX_NO_DATA+1,0,cmd_program_eeprom, "Program EEPROM","<address in hex> <data1> [... <data100>]"},
    20.     {"pg_f",0,MAX_NO_DATA+1,0,cmd_program_flash, "Program flash","<address in hex> <data1> [... <data100>]"},
    21.     {"ers_eeps",0,1,0,cmd_erase_eeprom_sector, "Erase EEPROM sector","<address in hex>"},
    22.     {"ers_fs",0,1,0,cmd_erase_flash_sector, "Erase flash sector","<address in hex>"},
    23.     {"ers_eep",0,1,0,cmd_erase_eeprom_block, "Erase EEPROM block","<address in hex>"},
    24.     {"ers_fb",0,1,0,cmd_erase_flash_block, "Erase flash block","<address in hex>"},
    25.     {"ers_all",0,0,0,cmd_erase_all, "Erase all blocks",""},
    26. };

    27. UIF_SETCMD UIF_SETCMDTAB[] =
    28. {
    29.     {NULL, 0,1,NULL,""},
    30. };
    复制代码

    如上代码,是命令和调用对应的函数。

    1. void
    2. run_cmd (void)
    3. {
    4.     /*
    5.      * Global array of pointers to emulate C argc,argv interface
    6.      */
    7.     int argc;
    8.     char *argv[UIF_MAX_ARGS + 1];   /* one extra for null terminator */
    9.     int cmpResult;

    10.     get_line(cmdline1);

    11.     if (!(argc = make_argv(cmdline1,argv)))
    12.     {
    13.         /* no command entered, just a blank line */
    14.         strcpy(cmdline1,cmdline2);
    15.         argc = make_argv(cmdline1,argv);
    16.     }
    17.     cmdline2[0] = '\0';

    18.     if (argc)
    19.     {
    20.         int i;
    21.         for (i = 0; i < UIF_NUM_CMD; i++)
    22.         {
    23.                 cmpResult = strcasecmp(UIF_CMDTAB[i].cmd,argv[0]);
    24.             if (!cmpResult)
    25.             {
    26.                 if (((argc-1) >= UIF_CMDTAB[i].min_args) &&
    27.                     ((argc-1) <= UIF_CMDTAB[i].max_args))
    28.                 {
    29.                     if (UIF_CMDTAB[i].flags & UIF_CMD_FLAG_REPEAT)
    30.                     {
    31.                         strcpy(cmdline2,argv[0]);
    32.                     }
    33.                     UIF_CMDTAB[i].func(argc,argv);
    34.                     return;
    35.                 }
    36.                 else
    37.                 {
    38.                     printf(SYNTAX,argv[0]);
    39.                     return;
    40.                 }
    41.             }
    42.         }
    43.         printf(INVCMD,argv[0]);
    44.         printf(HELPMSG);
    45.     }
    46. }
    复制代码

    run_cmd 是读取命令和解析命令运行,完成flash操作。

    以上就是flash驱动的底层,具体大家看源码即可。


    TWR-S08PT60_Flash_Lab.zip

    382.85 KB, 下载次数: 0

    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-11-27 01:21 , Processed in 0.133728 second(s), 18 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.