查看: 4081|回复: 2

【LPC845月饼板】+测试SPIFLASH的keil下载算法(二)

[复制链接]
  • TA的每日心情
    奋斗
    14 小时前
  • 签到天数: 2400 天

    连续签到: 109 天

    [LV.Master]伴坛终老

    84

    主题

    2万

    帖子

    3

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    22295
    最后登录
    2025-8-18
    发表于 2022-10-30 12:50:46 | 显示全部楼层 |阅读模式
    本帖最后由 流水源 于 2022-10-30 12:50 编辑

        上一篇搞定了下载算法,下面就测试一下下载算法是否有效。
    打开之前的例子工程。先添加一个图片bin数据到程序。这是个图片数据,等下就测试将这个数据下载到spiflash中,然后程序读flash数据,将图片显示到llcd屏上。
    1.png
    然后修改链接文件,添加flash映射的地址,这个地址在上篇下载算法里面设置的,地址在0X30000000位置,16MByte空间。实际存储到flash的地址要减去这个0X30000000偏移量,因为flash存储地址从0开始的。 2.png
    3.png
    然后添加测试代码并编译下程序。
    6.png
    可以看到map文件定位数据正好在0x30000000地址开始处了。
    4.png

    下一步设置添加下载算法了。
    5.png

    下载效果,可以看到左下角在下载数据了。

    7.png
    8.png

    运行程序。显示图片了,240*240.
    main
    1. uint8_t bmpBuffer[240*4];
    2. extern const unsigned char gImage_1[];
    3. extern const uint16_t c_bmp_clock_RGB565[];
    4. /*!
    5. * @brief Main function
    6. */
    7. int main(void)
    8. {
    9.     uint32_t addr;
    10.     BOARD_InitBootClocks();
    11.     SysTick_Config(SystemCoreClock / 1000U);
    12.     init_cycle_counter(true);
    13.    
    14.     BOARD_InitBootPins();
    15.     drv_gpio_init();
    16.     BOARD_InitDebugConsole();
    17.    
    18.     drv_spi_gpio_init();
    19.     drv_i2c_gpio_init();
    20.    
    21.     DbgConsole_Printf("LPC845 Mooncake Board Test!\r\n");
    22.    
    23.     spilcd_init();
    24.     WS2812_Init();
    25.     W25QXX_Init();
    26.    
    27.     __cycleof__("lcd_fresh_time(n/30000=X ms):")
    28.     {
    29.         spilcd_fill(0,0,240,240,LCD_RED);
    30.     }
    31.     delay_ms(100);
    32.     __cycleof__("lcd_fresh_time(n/30000=X ms):")
    33.     {
    34.         spilcd_fill(0,0,240,240,LCD_GREEN);
    35.     }
    36.     delay_ms(100);
    37.     __cycleof__("lcd_fresh_time(n/30000=X ms):")
    38.     {
    39.         spilcd_fill(0,0,240,240,LCD_BLUE);
    40.     }
    41.     delay_ms(100);
    42.    
    43.     DbgConsole_Printf("0x%0X \r\n",c_bmp_clock_RGB565);
    44.     addr=c_bmp_clock_RGB565;
    45.     __cycleof__("show 240*240 picture time:")
    46.     {
    47.         for (int i = 0; i < 120; i++)//(c_bmp_clock_RGB565-0x30000000)
    48.         {
    49.             W25QXX_Read((addr & 0x0FFFFFFF )+ i*240*4 ,bmpBuffer,240*4);
    50.             spilcd_draw_bitmap(0,i*2,240,2,bmpBuffer);
    51.         }
    52.     }
    53.     delay_ms(100);
    54.    
    55. //    DbgConsole_Printf("%0X \r\n",gImage_1);
    56. //    addr=gImage_1;
    57. //    __cycleof__("show 40*40 picture time:")
    58. //    {
    59. //        for (int i = 0; i < 4; i++)
    60. //        {
    61. //            W25QXX_Read((addr & 0x0FFFFFFF ) + i*800 ,bmpBuffer,800);
    62. //            spilcd_draw_bitmap(100,100+i*10,40,10,bmpBuffer);
    63. //        }
    64. //    }
    65. //    delay_ms(100);
    66.    
    67. //    for (int i = 0; i < BUFFER_SIZE; i++)
    68. //    {
    69. //        txBuffer[i] = i % 256;
    70. //        rxBuffer[i] = 0U;
    71. //    }
    72. //    DbgConsole_Printf("W25QXX Erase Chip.\r\n");
    73. //    W25QXX_EraseChip();
    74. //    DbgConsole_Printf("W25QXX Read Data.\r\n");
    75. //    W25QXX_Read(0,rxBuffer,64);
    76. //    for (int i = 0; i < BUFFER_SIZE; i++)
    77. //    {
    78. //        DbgConsole_Printf("%02X ",rxBuffer[i]);
    79. //    }
    80. //    DbgConsole_Printf("W25QXX Write Data.\r\n");
    81. //    W25QXX_Write_NoCheck(0,txBuffer,BUFFER_SIZE);
    82. //    DbgConsole_Printf("W25QXX Read Data to Check.\r\n");
    83. //    for (int j = 0; j < BUFFER_SIZE; j++)
    84. //    {
    85. //        W25QXX_Read(0 + j*BUFFER_SIZE,rxBuffer,64);
    86. //        for (int i = 0; i < BUFFER_SIZE; i++)
    87. //        {
    88. //            DbgConsole_Printf("%02X ",rxBuffer[i]);
    89. //        }
    90. //        DbgConsole_Printf("\n");
    91. //    }
    92.    
    93.     rgb_light = 0;

    94.         while(1)
    95.         {
    96.         keyscan_fsm(&pt_key_scan);
    97.         
    98. //        ws2812rgb_clock_fsm(&pt_ws2812_rgb);    //效果1
    99.         ws2812rgb_demo_fsm(&pt_ws2812_rgb);   //效果2
    100.         
    101.         GPIO_PortToggle(GPIO, 0, 1u << 0);  //led灯
    102.         }
    103. }

    复制代码


    11.jpg
    9.png

    好了,测试OK。后面再也不用 担心图片字体把LPC845的64Kflash撑爆了。spiflash虽然不能做运行代码区,但是储存各种资源数据还是足够了。
    LPC845-MoonCake_test.rar (16.1 MB, 下载次数: 4, 售价: 10 NXP金币)
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2025-8-8 16:43
  • 签到天数: 1504 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    97

    主题

    4692

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    10093
    最后登录
    2025-8-8
    发表于 2022-10-31 14:42:17 | 显示全部楼层
    这回明白了。
    谢谢楼主详细而又耐心的指导。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 10:21
  • 签到天数: 1621 天

    连续签到: 2 天

    [LV.Master]伴坛终老

    25

    主题

    1万

    帖子

    0

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    10897

    活跃会员

    最后登录
    2025-8-17
    发表于 2022-10-31 15:31:50 | 显示全部楼层
    牛逼,虽然我都看不懂,但是我还是来支持了
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-8-18 14:51 , Processed in 0.088191 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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