查看: 1870|回复: 2

[原创] 在YL-K26Z开发板上利用串行通信功能向flash存储器写入数据

[复制链接]
  • TA的每日心情
    奋斗
    2023-2-15 00:12
  • 签到天数: 969 天

    连续签到: 1 天

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7123
    最后登录
    2023-4-20
    发表于 2016-3-8 17:49:08 | 显示全部楼层 |阅读模式
    在YL-K26Z开发板上配有32MB SPIflashW25Q32,它适于做字库来使用。在创建字库过程中,若采用纯程序的方式来实现,显然是不可取。若将字库先制备成BIN文件,然后再通过串行通信的方式将BIN文件的内容写入flash,则是一个较好的方式。
    下面介绍一种用串行通信向flash存储器写入数据的方法,利用该原理有利于在YL-K26Z开发板上实现flash字库的创建。

    要实现此功能,在原SPI例程的基础上稍加修改即可,步骤如下:
    1)将MKL_uart.h文件中的 #defineUART0_IRQ_ENABLE    0
    改为:

    #define UART0_IRQ_ENABLE    1
    2)将MKL_uart.c文件中的中断接收函数改为:
    INT8U ch[20],j
    void UART0_IRQHandler (void)
    {   
      UART0_MemMapPtr uartPtr = UART0_BASE_PTR;  /* 发送中断处理程序*/
      #if UART0_SEND_IRQ                         /* 用户定义       */
      #endif
       #ifUART0_RECEIVE_IRQ
       while (UART0_S1_REG(uartPtr) &UART0_S1_RDRF_MASK)
    {   /* 清除中断标志  */
          uart0SendChar(UART0_D_REG(uartPtr));     /* 返回接收数据*/
    ch[j]= UART0_D_REG(uartPtr);
    j++;
      }   
      #endif
    }
    3)将主函数改为:
    1. Extern INT8U ch[20],j;

    2. int  main (void)
    3. {   INT8U spiid,i = 0;
    4.     SystemCoreClockUpdate();          /* 时钟配置 */
    5.         j=0;
    6. uart0Init(9600,0,0,8,1);
    7.                 printf("SPI Test Star...\n");
    8.                 gpioInit();                    /* 管脚初始化 */
    9.       spiInit(SPI0_BASE_PTR , Master);  /* SPI0主机模式初始化  */
    10.         spiid = flash_read_id();          /* 读ID */
    11.                 printf("ID=0x%x08\n",spiid);
    12.                 while(1) {
    13. if (j>=20)
    14. {
    15. printf("Start to erase sector 0...\n\r");
    16.                 flash_sector_erase (0x000000);
    17.         myDelay(300);                 /* 延时 */
    18.             ledSet(0) ;                     /* 若SPI擦出完成,则D2灯亮 */
    19.         printf("Start to write sector 0...\n\r");
    20.                 flash_write_sector(0x000000, SNDBUFPT,20);  /* 以0x0为起始地址执行写 */
    21.         myDelay(30);
    22.             ledSet(1);                                /* 若SPI写入完成,则D3灯亮 */
    23. printf("Start to read sector 0...\n\r");          /* 数组中的数据写入芯片 */
    24.         flash_read_data(0x000000, ch,20);            /* 以0x0为起始地址执行读 */
    25. for (i = 0;i < 20;i++)
    26. {
    27. uart1SendChar (ch[i]);
    28. }
    29. printf("ok...");
    30. ledSet(2);                                /* 若SPI读取完成,则D4灯亮 */
    31.          }
    32.    }
    33. }
    复制代码


    串口助手向flash存储器写入数据效果图

    串口助手向flash存储器写入数据效果图
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2020-3-29 09:54
  • 签到天数: 418 天

    连续签到: 1 天

    [LV.9]以坛为家II

    21

    主题

    2928

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3307
    最后登录
    2021-4-7
    发表于 2016-3-8 21:37:16 | 显示全部楼层
    多谢分享。学习了。。 nxp-logo.png
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-2-15 00:12
  • 签到天数: 969 天

    连续签到: 1 天

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7123
    最后登录
    2023-4-20
     楼主| 发表于 2016-3-9 08:12:09 | 显示全部楼层
    本帖最后由 jinglixixi 于 2016-3-9 08:16 编辑
    Paderboy 发表于 2016-3-8 21:37
    多谢分享。学习了。。

    注:uart1SendChar (ch);
    应改为  uart0SendChar (ch);
    粘贴时大意了。
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-22 06:36 , Processed in 0.084682 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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