国产芯片替代STM32处理器之后的代码管理和固件升级方案

根据st的版权要求,由其提供的代码仅能用于由st制造的产品或者为st制造的产品。

如果采用了st提供库函数进行产品的开发,当用CKS或者GD的处理器替代st的处理器时。

必须要用国产厂家提供的库函数重新编写代码,那么需要澄清以下问题:

1. 能否将st以及国产厂家两套库函数编译下载到处理器,程序运行时肯定CPUID等条件判断芯片类型并调用对应的库函数。

在处理器中同时包含 st以及国产厂家的库函数,占用比较大的空间;

另外,当从处理器中读取出相应的二进制代码,并与st库函数编译出来进行比对,会在大量匹配的代码。对于这样的比对结果,很难解释采用国产厂家的芯片时并没有使用到st的库函数。

因此,不能将两套库函数同时编译下载到处理器

2. 能否用编译开关选择不同的库函数

为了便于软件工程的管理,希望使用两种不同芯片的软件共用工程文件,仅在代码层级通过宏定义来区分。

根据公司要求,我们需要将整个工程上传到开源代码扫描平台进行扫描,当用blackduck进行扫描时,会同时检测到st以及国产芯片的代码库。

这时,需要向审核人员解释这两套代码是通过编译开关进行区分,可以保证st的代码仅用于st的产品,不确定审核人员是否认同这一点。

因此,不能用编译开关选择不同的库函数

综上,使用国产芯片替代时,需要:

使用不同的软件工程

编译生成不同的二进制代码

使用不同的git仓库进行代码管理

使用不同的软件料号进行固件管理

创建不同的BOM用于产品生产,根据处理器的厂家选择不同的生产BOM

产品出货之后,有两种不同的固件升级方式:

- 采用烧写工具通过SWD/JTAG升级接口进行升级

- 通过OTA方式由上位机等软件将固件发送给设备进行升级

当用国产芯片替代之后,在市场上的产品会存在使用不同处理器的多种型号。

不同型号需要升级对应的不同固件,但是用户并不知道处理器的差别。

因此,我们的升级方案需要自动识别出处理器的厂家,自动选择芯片对应的固件进行升级。

需要处理器提供方法识别生产厂家,

国产芯片替代STM32处理器之后的代码管理和固件升级方案

区分GD32和STM32

比如:

对于GD的处理器,通过下述方法区分GD32和STM32

GD32F30x在设计阶段,已经预留了相关寄存器,用户只需要软件读取寄存器 ,即可获取到相关的型号信息,GD32F30x每一型号此处值都为固定值 。

Code_Num=*( uint32_t *)( 0x40022100 );

对于CKS的处理器,芯片没有提供方法用于区分STM32。

采用烧写工具的升级方案如下:

1) 不能使用现成的烧写软件如st的programmer或者st-link utility等烧写程序。

国产芯片替代STM32处理器之后的代码管理和固件升级方案

st-link utility的命令行

2)自己开发烧写软件,通过st-link utility提供的命令行按下述步骤烧写:

通过st-link_cli.exe -r8 0x40022100 12读取出型号信息 。

根据型号信号判断是否为GD的处理器,如果是则选择GD的固件,否则选择其它厂家的固件。

将选定的固件通过“st-link_cli.exe -p 固件名称“这一命令烧入处理器。

国产芯片替代STM32处理器之后的代码管理和固件升级方案

程序烧写工具

通过OTA的升级方案如下:

在主处理器、上位机、云服务器需要升级设备固件时,先发一条消息给处理器,由处理器读取型号信息并返回。收到应答之后,判断是否为GD的处理器,如果是则选择GD的固件,否则选择其它厂家的固件,将固件按照原来方案分包发给处理器进行升级。

总结:

1) 国产芯片和ST芯片的代码需要按照完全不同的软件料号将代码分开管理

2) 通过烧写工具升级需要自己设计烧写软件

3) 通过OTA升级应该修改升级代码,增加判断芯片厂家的步骤

4) 没有提供方法识别厂家的芯片(如CKS)不能使用ST提供的代码库,只能直接操作寄存器进行软件开发,而且需要与ST完全共用一套代码。

展开阅读全文

页面更新:2024-04-21

标签:处理器   芯片   代码   方案   寄存器   软件工程   上位   型号   厂家   工具   程序   方法   库函数   产品   科技   软件

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top