移植 ZephyrRTOS 到思澈 SF32LB58 过程笔记 一

描述

为 ZephyrRTOS 增加 SoC 支持(2) 基础框架 N32L406 的移植还没有完成,最近又开坑做思澈 SF32LB58 的移植。原因一是这个芯片带蓝牙和 2D GPU,适合做一些低功耗显示的设备,比如码表,导航设备,以及智能眼镜之类,我觉得挺有意思;另一个原因是思澈的老板也愿意支持开源,说很多芯片寄存器功能愿意开发给社区,特别是包括蓝牙的接口也愿意“以后”开放给社区对接 ZephyrRTOS 的蓝牙协议栈,所以我觉得还是可以尝试做一下。还有一个原因是他们说是愿意提供给社区开发者提供一些资金支持,但是目前看他们讨论的情况,这个资金支持倒也不能抱太大期待。先用爱发电吧。思澈的资料都可以从官方 wiki: https://wiki.sifli.com/index.html 这里下载。我先基于官方仓库https://github.com/OpenSiFli/zephyr提供的一个移植仓库开始的,但是因为代码组织和依赖的关系,我重新组织新建了仓库:manifest repo: https://github.com/iotpi/sifli-porting-templatehal module: https://github.com/iotpi/hal_sifli,主要包含芯片的 baremetal 驱动。zephyr porting: https://github.com/iotpi/sifli_zephyr,这一仓库预期是以后可以合并到 zephyr upstream,但是工作量还是很巨大,遥遥无期另外还有一个朋友完全基于官方的仓库继续修改的组织架构,放在他自己的仓库下:https://github.com/ck-telecom/zephyr-SiFli,有兴趣的朋友也可以围观。1. 芯片架构蓝牙这个芯片架构还有点复杂,有三个核,分别是 HCPU, ACPU和LCPU。其中 LCPU 一般用心跑蓝牙协议栈。蓝牙协议栈还是闭源的。这里 HCPU 和 ACPU 合起来组成了 HPSYS,LCPU单独组成 LPSYS。2. 设备树(devicetree, dts)我看了 nxp 和 nordic 对于多核 MCU 架构的dts定义方式,是把所有的核定义在了一个基础 dtsi里,然后在特定的核的 dtsi 定义里再 /delete-node/ 移除掉。我现在并不明白他们为什么要这么使用,问了 zephyr 的专家,也并不确定。所以目前我使用了我自己认为更适合的方式去组织,如果后面遇到了新问题,再考虑修改这个结构。鉴于上面的芯片功能框图,我定义基础的 dts 文件:sf32lb58.dtsi,用于定义整个 SoC 共用的外设;蓝牙  sf32lb58_hpsys.dtsi,定义 HCPU 和 ACPU 共用的 外设(内存);蓝牙sf32lb58_hcpu.dtsi,仅供 HCPU 访问的CPU及内存;蓝牙sf32lb58_acpu.dtsi,仅供 ACPU 访问的CPU及内存;蓝牙sf32lb58_lpsys.dtsi,定义 LPSYS 访问的设备与内存;蓝牙sf32lb58_lcpu.dtsi,定义 LCPU 相关的CPU和内存。蓝牙sf32lb586.dtsi:定义 具体 sf32lb586 特定的配置,应该主要是 合封的PSRAM 和 FLASH 的配置。sf32lb586_hcpu.dtsi:这个文件应该由板级 dts 定义包含的头文件蓝牙同样还要定义sf32lb586_acpu.dtsi, sf32lb586_lcpu.dtsi注意,上面的截图都只作为参考,最终编译有问题或者别的架构原因,上面的内容还是会变更。下期继续填坑。文章里如果出现错误,或者您有什么建议,欢迎留言指正!感谢!

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分