如果采取了st供应库函数进行产品的开拓,当用CKS或者GD的处理器替代st的处理器时。
必须要用国产厂家供应的库函数重新编写代码,那么须要澄清以下问题:

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

在处理器中同时包含 st以及国产厂家的库函数,占用比较大的空间;
其余,当从处理器中读取出相应的二进制代码,并与st库函数编译出来进行比对,会在大量匹配的代码。对付这样的比对结果,很难阐明采取国产厂家的芯片时并没有利用到st的库函数。
因此,不能将两套库函数同时编译下载到处理器
2. 能否用编译开关选择不同的库函数
为了便于软件工程的管理,希望利用两种不同芯片的软件共用工程文件,仅在代码层级通过宏定义来区分。
根据公司哀求,我们须要将全体工程上传到开源代码扫描平台进行扫描,当用blackduck进行扫描时,会同时检测到st以及国产芯片的代码库。
这时,须要向审核职员阐明这两套代码是通过编译开关进行区分,可以担保st的代码仅用于st的产品,不愿定审核职员是否认同这一点。
因此,不能用编译开关选择不同的库函数
综上,利用国产芯片替代时,须要:
利用不同的软件工程
编译天生不同的二进制代码
利用不同的git仓库进行代码管理
利用不同的软件料号进行固件管理
创建不同的BOM用于产品生产,根据处理器的厂家选择不同的生产BOM
产品出货之后,有两种不同的固件升级办法:
- 采取烧写工具通过SWD/JTAG升级接口进行升级
- 通过OTA办法由上位机等软件将固件发送给设备进行升级
当用国产芯片替代之后,在市场上的产品会存在利用不同处理器的多种型号。
不同型号须要升级对应的不同固件,但是用户并不知道处理器的差别。
因此,我们的升级方案须要自动识别出处理器的厂家,自动选择芯片对应的固件进行升级。
须要处理器供应方法识别生产厂家,
区分GD32和STM32
比如:
对付GD的处理器,通过下述方法区分GD32和STM32
GD32F30x在设计阶段,已经预留了干系寄存器,用户只须要软件读取寄存器 ,即可获取到干系的型号信息,GD32F30x每一型号此处值都为固定值 。
Code_Num=( uint32_t )( 0x40022100 );
对付CKS的处理器,芯片没有供应方法用于区分STM32。
采取烧写工具的升级方案如下:
1) 不能利用现成的烧写软件如st的programmer或者st-link utility等烧写程序。
st-link utility的命令行
2)自己开拓烧写软件,通过st-link utility供应的命令行按下述步骤烧写:
通过st-link_cli.exe -r8 0x40022100 12读取出型号信息 。
根据型号旗子暗记判断是否为GD的处理器,如果是则选择GD的固件,否则选择其它厂家的固件。
将选定的固件通过“st-link_cli.exe -p 固件名称“这一命令烧入处理器。
程序烧写工具
通过OTA的升级方案如下:
在主处理器、上位机、云做事器须要升级设备固件时,先发一条给处理器,由处理器读取型号信息并返回。收到应答之后,判断是否为GD的处理器,如果是则选择GD的固件,否则选择其它厂家的固件,将固件按照原来方案分包发给处理器进行升级。
总结:
1) 国产芯片和ST芯片的代码须要按照完备不同的软件料号将代码分开管理
2) 通过烧写工具升级须要自己设计烧写软件
3) 通过OTA升级该当修正升级代码,增加判断芯片厂家的步骤
4) 没有供应方法识别厂家的芯片(如CKS)不能利用ST供应的代码库,只能直接操作寄存器进行软件开拓,而且须要与ST完备共用一套代码。










