空调控制器使用的cpu的型号为stm32f050g4u6,标称为16k的flash。而实际测试结果是片内却有32可,与stm32f050g6u6相同。
也就是说,这两款芯片其实是一样的内容,只是出于商业目的,打上了不同的mark。小小鄙视ST一下。
我们实际也是使用了32k,既然ST如此大方,我们暂时就不必换芯片了。。
为支持远程升级,flash共划分为3块区域:
1. iap 引导区 0x8000000-0x80027ff 10k空间,用于存储引导程序。
2. 配置数据区 0x8003000-0x8003fff 4k空间。
3. app程序区 0x8004000-0x8007fff 16k空间。
数据区保存的数据为:
0x8003000-0x80033ff 1k的射频配置数据,射频的网络号,频道资源等信息均保存于此。
0x8003400-0x8003bff 2.5k 存储5种红外编码,分别对应关机,模式1〜模式4。
每种红外编码占用512存储空间。2bytes表示一个高电平或低电平的时间。
因此,每4bytes表示1位红外码,512bytes可支持长达128位的红外码。
原以为128位算是足够长了,基本能学习各种红外遥控器。
谁知道遇到变态的格力空调,编码居然长达150多位!
抓狂之余,只得更改程序,将红外码的长度扩展到512,相应的,每种编码将占用1k空间的flash。5种编码共需要5k。
郁闷的事情又来了,数据区找不到5k的连续空间了。
由于iap无法远程升级,因此射频配置的数据区是不能变的,否则在Iap运行时,将无法与已经配对的中控通信。这将导致无法再次远程升级。
纠结良久后,将数据区最终做如下调整:
1. 8003000-80033ff保持不变,依然存储射频配置数据。
2. 8003400-8003fff 3k空间保持前3种红外码。
3. 8002800-8002fff 2k 保存后2种红外编码。