飞思卡尔MC56F8037这款DSC是专门针对马达控制推出的一款高性能,高性价比DSC,为什么叫DSC呢,和DSP有何区别呢?一般的DSP只用来处理大量数据,不包含控制单元,但是这个DSC内部就集成了控制单元,因此可以称作数字信号控制器。
这款芯片的flash空间还算充裕,包含64K字节,RAM则为8K,因此用作一般的电机控制(SVPWM,DTC)等用途时flash空间应该是够了。如果再加上bootloader,可能就有些紧凑了,因此要尽可能缩小代码,简化代码,bootloader也同样如此。
如果想通过CAN或者串口下载程序,就要做个bootloader并将其烧写到flash的某个区域,其中要将flash分成三个区域,如下表所示
地址0x7B00 bootloader程序区
地址0x7800 bootloader缓冲区
地址0x0000 主程序区
其中bootloader缓冲区用作升级bootloader程序时,先将新的bootloader程序传送烧写到bootloader缓冲区,然后通过校验无误后将缓冲区程序拷贝烧写到bootloader程序区,这样对于升级bootloader比较安全可靠。
原理:每次启动程序从0x0000地址开始执行,然后条转到0x7B00地址执行bootloader,此时开定时器(如果在某个固定时间内串口或者CAN未收到数据就跳转到主程序区执行),如果在串口或CAN上收到数据此时识别命令标志字,看是升级主程序还是bootloader,然后到对应区进行页擦除操作(擦除命令有MASS erase整个flash擦除和page erase按页进行擦除一页512字节),然后将对应的程序烧写到对应的区域,如果是烧写主程序则在烧写完后从主程序去执行,如果是升级bootloader,那么烧写完bootloader缓冲区之后对其内容进行校验,校验成功后将缓冲区的内容拷贝烧写到bootloader程序区,烧写完后从bootloader开始执行。
烧写格式:烧写的文件为S19文件,一般经过CodeWarrior V8.3或V10.4编译后生成,内容大概包括:每行开头的S0、S3、S7,例如S31000001209876543...,意思是S3表示数据,然后紧接着一个字节为数据字节个数,然后两个字节是地址,然后就是数据,在最后一个字节是校验码。S0包含的内容V8.3编译过都相同经过ASSIC码译码理解为字符PROGRAM&DATA,S3为数据,S7为结尾不会烧到flash中不必考虑。
注意问题:烧写程序中注意大小端问题,此芯片为小端,烧写中应将字节高低字节颠倒。
具体程序的实现会在后续章节分析。