如何更好地设计面向在板烧录的产品-SPI Flash篇

您在设计产品时,是否真的有考虑烧录效率?

很多工程师简单地认为:只要设计的产品满足功能和性能要求,就算是完成设计了。但真的是这样吗?不是!产品的功能和性能再好,如果生产速度无法跟上,就算不是一个合格的产品!

例如,深圳某家汽车生产厂家在设计模块时,将SPI Flash挂载到Arm®的SPI总线上。由于设计时没有考虑烧录效率问题,所以只是简单地采用低速CAN通信方式烧录SPI Flash。通过其传输烧录数据,速度能有多低是可以想像的。经实际测试,整片8MB需耗时30分钟!也就是说,如果只有一台烧录机器,24小时不中断,也只能烧录48个产品。

在产品研发、生产、升级、维修时,如果采用如此低的效率烧录方式,工厂肯定是不接受的,工程师自己会接受吗?

一种非常简单、高效的烧录方案

很显然,在产品设计时不能预留低速的烧录接口,否则远远跟不上SPI Flash本身的写入速度!CAN、UART速度太低,而USB、以太网占用接口,更何况有些芯片并不具备这些接口。所以,需要选择一种通用、高速,占用资源少、方便快捷的接口。这种接口只有JTAG/SWD!

很多工程师会发现,上图的方案非常简单,自己设计的产品中就已经采用了这种方案!但是,这并不表明您真的了解它的真正价值所在,也不表明您能够充份利用它提升量产效率。大部分工程师仍然只是在开发阶段利用AK100Pro仿真器烧写固件到Arm®芯片中而已。

具体应该如何设计

下面就来详细讲解如何应用该方案进行设计。

首先,硬件设计时将SPI Flash挂载到Arm®的外部SPI总线上。注意,如果Arm®和SPI Flash的数据线宽度>1(例如,MX25L1635同时支持SIO0、SIO1、SOIO2、SIO3);在资源允许的情况下,尽量使用全部数据线宽,使得Arm®到SPI的数据线宽度成倍提升。PCB走线要优化,以承受高达10~50Mbit/s的SPI时钟。

其次,在PCB上预留JTAG/SWD接口。有些工程师觉得预留接口会额外占用PCB面积。实际设计时,不需要按Arm®标准接口引出全部管脚,只需要引出用到的管脚,如SWD只需要VDD、GND、SWCLK、SWDIO四根信号,同时采用1.27mm的排针或者预留接触焊盘,可最小化PCB占用面积。

然后,自定义SPI Flash烧写算法。因为SPI Flash挂载在Arm®的方式多样,所以需要针对该硬件电路编写合适的烧写算法。KFlashPro软件上的烧写算法接口已经公开,只需要实现ProgramPage()、EraseChip()等几个编程函数即可。在实现过程中,综合考虑PCB走线、MCU和SPI Flash的极限SPI频率,将SPI总线的时钟频率设置最大、使用全部的数据位宽,最大化加快MCU与Flash之间的通信速率,注意优化ProgramPage()实现使得写入方式最佳(KFlashPro软件的算法接口将有另外的文章详述)。

最后,连接AK100Pro仿真器,打开KFlashPro软件,选择所用的Arm®芯片,加载SPI Flash烧写算法。综合考虑PCB走线、芯片的JTAG/SWD极限频率,调整AK100Pro输出的JTAG/SWD时钟,如12MHz,最大化提升AK100Pro和ARM之间的通信速率。测试完成后,保存KFlashPro工程,直接移交给工厂。

好的设计方法带来10倍的效率提升

我们为该汽车生产厂家做了方案定制,测试烧录SPI Flash整片(8M bytes)数据由原来的30分钟降至3分钟,速度提升10倍!

同时,由于AK100Pro不仅仅能烧录SPI Flash,而且能一次性加载多个文件,支持一键烧写ARM芯片和SPI Flash,避免了工厂需要执行两次不同的烧写流程,提升整体效率!

总结

通过AK100Pro连接ARM的JTAG/SWD接口实现在板实现,方案虽然简单,但是却非常高效,几乎不需要额外的成本。研发过程中,工程师采用此方案可方便调试;研发完成后,只需要将KFlashPro的工程和AK100Pro交给工厂即可,不需要再额外选择烧录方案,实现研发到生产的无缝迁移。