金牌会员
 
- 积分
- 1770
- 金钱
- 1770
- 注册时间
- 2015-6-11
- 在线时间
- 313 小时
|
发表于 2017-11-16 23:32:03
|
显示全部楼层
本帖最后由 zc123 于 2017-11-16 23:49 编辑
我正好在一家嵌入式芯片公司做固件开发的工作,倒是可以聊聊。芯片厂商虽然是芯片作为产品,但配套的嵌入式软件开发也是必须的,主要做的工作是芯片的驱动库开发,芯片研发过程中的软件验证以及产品原型demo实现,而且硬件工程师也不是主力,他们负责的就开发板和产品原型demo的设计,芯片开发主要是由IC工程师,他们也属于软件开发的,只不过是用FPGA实现芯片原型的
固件开发的流程是这样:
1.首先要完成的是分模块的外设驱动及测试,这个一般配合芯片原型验证完成,每个模块都要驱动库,并根据库写每个模块的独立测试代码,进行初期测试。这时主要参考的就是内核信息文件,寄存器地址功能定义,除了串口打印都要用外,模块基本都是独立测试的,像SRAM,SDRAM,SQI, USART, IIC, TIMER,PWM,HDMI,USB....这就是初期实现过程。
2.当各个模块测试完毕后,都会实现些常用案例,像简单的IIC,SQI操作常用的外部芯片,复杂的USB采集图像, IAP网页/USB在线升级, 如果1已经完善的话,2基本上都是应用层实现,底层都是上述模块的组合,其实并不困难,demo的要求并不高,熟悉底层驱动的话,上层实现的东西也不多。
如果你想脱离固件库和例程写demo,除了ETH和USB很难外,其它底层基本都是模块组合,难点在于需求分析没有经验,例如参考datesheet实现个USART在线升级的demo, 就可以将步奏分解,第一步通过寄存器模式封装实现USART串口通讯,第二步制定通讯协议,测试通讯可靠性, 第三步封装寄存器,实现写入内部FLASH代码, 第四步理解IAP机制,将代码分成bootload和application, 设计升级流程, 第五部,完成上述代码,并测试。按照这个流程走完,基本上涉及到datesheet的就1,3,4步,如果单独拿出来,和用标准固件库比难度并没有大很多,困难其实在于需求杂糅在一起,如果没有很多的开发经验,很能分析的清楚。 |
|