至于开箱、环境搭建其它同学都说得太多了,就不赘述了。此处省略1000字。
对于一款新的芯片,从不熟悉到熟悉,总是从官方例程开始,我也不例外,下好资料包,尝试官方工具过代码下载成功,就盯着lvgl_demo例程看,断断续续,也算了解大概。
优点:
一、开发环境易于搭建,直接给到的Keil工程,参照例程很容易调试跑通。
二、用官方的下载工具,非常方便,加载少些文件后,连上串口,打开烧录,开发板复位即可自动烧录。同时下载软件也可以查看串口调试信息,不用更换其它串口软件,省事。
三、芯片方面,功能强大,接口很多,支持BT双模,驱动RGB屏显,xip访问外部flash。
不足:
一、lvgl例程中夹杂了太多的无用代码,增加了阅读难度,容易误导。整个工程的架构有点复杂,其中有些函数弯来拐去的,来回调用,又加上RTOS的事件驱动,没有指导文档,对于新手来说,有很大阻力。
二、芯片规格书和手册对于芯片内部叠封flash及spi接口的PMU语焉不详,及时看代码也比较迷糊,感觉不好下手。
三、芯片方面,缺少图形加速处理(类似于STM32的DMA2D),在图形复杂处理的时候,明显不足,后面视频可以看到。
==========分割线===========
下图是main.c中,hw_xip_flash_init()函数,进入内部看了分析,我认为式初始化内部叠封的flash,用于程序存储。但疑惑的是,在这之前的代码又是从哪里加载运行的呢?
![Freq-1.jpg Freq-1.jpg](https://static.assets-stash.eet-china.com/forum/202502/12/173934922186156163341zu4h4raj514x5war.jpg)
上图中,hw_external_flash_init()是初始化外部flash,其实在ext_flash_program()中有初始化外部flash,但如果没有连接下载,就不会初始化,所以这里再做一次初始化。
当我看到下图中用lv_img_set_src()时,又跟进查看了图片源
![Freq-3.png Freq-3.png](https://static.assets-stash.eet-china.com/forum/202502/12/173934925187183163411njuq60c7gvhoo69l.png)
图片源数组:
![Freq-4.png Freq-4.png](https://static.assets-stash.eet-china.com/forum/202502/12/173934926110776163421xjy727b3jbyoc56z.png)
图片定义:
![Freq-5.png Freq-5.png](https://static.assets-stash.eet-china.com/forum/202502/12/173934927690352163436w8axb5hltuutu5vz.png)
图片起始地址:
![Freq-6.png Freq-6.png](data/attachment/forum/202502/12/163551rrlzrfy3mr1ryzrn.png)
跟进lv_img_set_src()内部,看到Freq官方对这个函数做了修改,可以看到图片地址增加了基址:0xC0000000
![Freq-7.png Freq-7.png](https://static.assets-stash.eet-china.com/forum/202502/12/173934937212529163612e9mp0i0kcm7qmpo7.png)
由此,我猜测是把外部Flash映射到0xC0000000起始的地址空间,但没有看到规格书上有明确说明。
另外从Freq官方的keil下载算法也可以看出端倪,都是ext. flash spi
![Freq-8.png Freq-8.png](https://static.assets-stash.eet-china.com/forum/202502/12/173934937463326163614cmwzmelwrapldtdj.png)