liamjeal 发表于 2012-9-19 09:54:30

coocox系列课程-Colinkex&coflash

本帖最后由 liamjeal 于 2012-9-19 14:15 编辑

今天就介绍第三部分,CoLinkEx+CoFlash使用指导。
在讲使用之前,先简单介绍下colinkex是什么:
CooCox CoLinkEx是一款支持SW调试的仿真器,它可以调试ARM Cortex MCU设备。CoLinkEx直接支持CoIDE和CoFlash,并与Keil Realview MDK,IAR Embedded Workbench无缝集成。
CoLinkEx有一下特点:
        支持Cortex M设备
        支持SW调试
        支持JTAG调试
        支持CoFlash,CoIDE,MDK和IAR
支持的器件:包括主流的M0和M3,这里不一一列举,你可以通过,coide或者coflash查看。
CoLinkEx适用于:
        Keil RealView MDK 4.03 或更高版本 (MDK 4.13a除外)
        IAR Embedded Workbench 5.50 或更高版本
        CooCox CoFlash
        CooCox CoIDE

CooCox CoLinkEx是个开源硬件,你可以从官网购买,或者你不想花费这个费用,或者想自己学习学习,也可以自己DIY。
购买的话你可以给[email protected] 发一封邮件
当然,肯定很多人都比较关注如何DIY,进入http://www.coocox.com/CN/CoLinkGuide/CoLinkDIY.htm 页面,这里面有DIY的全套资料。电路图原件清单,PCB,固件内容等等,CoLinkEx的原理图用orcad画的,PCB用PADS。
怎样更新CoLinkEx固件?
短接JP1。
上电(ColinkEX连接到PC)。
等待PC枚举出卷标CRP2 ENABLD(或CRP DISABLD)的可移动磁盘,如果没有出现,请多按几次复位键(BP1)或重新上电。
把CRP2 ENABLD(或CRP DISABLD)可移动磁盘中的firmware.bin删除。
把下载好的CoLinkEx固件复制到此可移动磁盘中。
断开JP1,重新上电后即可使用

这里不多说,DIY这东西,多说没用,要动手实践,有问题邮件联系,[email protected]
或者QQ群去提问:167693982

下面讲使用
这次课和其他的课有点不一样,上两次都是软件的课,从网上下载安装一个软件就可以开始使用了,这次课,内容与硬件相关,需要结合硬件来讲,那么我就以Cookie板为例来讲解吧。为什么以Cookie板来讲解呢?
因为Cookie集成了CoLinkEx。那么我们看看Cookie的图片吧,相信很多人都看过了,

当然,大家有任何colinkex都可以用,单个colinkex,colinkex和LPC1114的拼版,colinkex和LPC11C1x的拼版都行。
需要做以下准备工作,
如果没有安装CoCenter,先安装,方法以前的课程讲过。
安装完成打开登录CoCenter。
打开CooCox CoCenter如图,它会自动检测电脑上是否安装了coocox的相应软件,目前管理软件列表里面有CoIDE, CoFlash, CoSmart, CoOS,ColinkEx for MDK插件,ColinkEx的USB驱动。

本次课程需要用到的就是coide、CoFlash、ColinkEx for MDK插件,ColinkEx的USB驱动。需要先下载安装这些。
安装ColinkEx的USB驱动需要注意以下问题:选择 ColinkExUsbDriver 版本

准备好这些之后,我们开始讲colinkex在coide的应用:

Coide的应用很简单,很方便,用colinkex的话,只需要在调试配置里面设置一下就可以了。如图:

先找到配置按钮。
然后配置为:

OK,你现在就可以用coide来下载调试了。
在MDK中调试,开始之前要先安装CoMDKPlugin
CoMDKPlugin是一款在keil Realview MDK环境下调试ARM Cortex MCU芯片的软件。

要在Keil Realview MDK下使用Colink, CoLinkEx or NuLink & NuLinkMe,您只需要关注以下几步:
步骤:
1.        在Keil RealView MDK下打开您的工程。
2.        配置对话框中Debug -> Use选择"CooCox Debugger"。

3.        点击Settings,Adapter选择"Colink或者ColinkEx"。如果您使用NuLink或NuLinkMe,Adapter应该选择"Nulink"。

4.        如果您想在Flash中调试您的程序,您还需要配置Utilities选项,选择"CooCox Debugger"。

5.        调试您的工程。
在IAR中调试:
需要先安装CoIARPlugin,CoIARPlugin是一款在IAR Embedded Workbench环境下调试ARM Cortex MCU芯片的软件。
这个只能通过页面http://www.coocox.com/CN/CoLinkGuide/CoIARPlugin.htm 下载,由于这个插件很久没有更新,与最新的colinkex固件有冲突,需要用的话可以更换一下固件,方法上面讲过。
在IAR Embedded Workbench下使用Colink, CoLinkEx or NuLink & NuLinkMe,您只需要关注以下几步:
步骤:
1.        在IAR Embedded Workbench下打开您的工程。
2.        右击您的工程,选择"Options..."。

3.        在Category中点击"Debugger"选项,"Driver"菜单中选择RDI。

4.        在Category中点击"RDI",在"Manufacturer RDI driver"菜单中选择CoRDI.dll 文件。

5.        在菜单栏的RDI选项中打开配置对话框,"Debug Target"选择Colink,CoLinkEx或 Nulink。

6.        此时,您可以在IAR下调试您的工程了。
Colinkex差不多就介绍这些,中间休息一下,提问时间
下面接着介绍coflash


CooCox CoFlash是Windows下针对Cortex M系列芯片的Flash编程软件,支持大部分Cortex M系列芯片。CoFlash除了有一个直观的传统的图形用户界面外,它还支持命令行模式。CoFlash配合Colink,CoLinkEx,Nulink等调试器使用。另外,用户还能够定义自己的编程算法来支持更多的flash设备。

特征:
        免费
        支持大多数常见的Cortex M系列微处理器
        支持用户自定义的flash编程算法
        直观的图形用户界面及命令行模式
        支持编程.bin或.elf文件
        保存用户的最后一次配置
其他详情,请查看 http://www.coocox.com/CN/CoFlash_Programmer.htm

支持的调试器如图:

要使用coflash,你有至少一个调试器,需要注意的是:并不是所有的调试器,都支持左边的所有芯片。
Coflash支持图形化界面和命令行模式,两种方式,下面我主要从图形化界面来讲:
Cookie板子为例,芯片当然选择M0516ZN,调试器选择colinkex,其他的配置可以采用默认值。配置好之后进入command页面进行具体操作。

CoFlash 图形用户界面的功能:
        配置
        编程    擦除    校验    空白检测

配置
在使用CoFlash进行flash编程之前,需要进行以下配置:
1.        在MCU树形列表中选择你所使用的MCU;
2.        配置 USB调试器;
3.        添加/移除flash算法(支持多算法),非必选操作。

编程flash设备
1.        在Flash Sector Map框中选择flash算法,配置扇区;
2.        在Data File框中,选择映像文件,目前仅支持.bin或.elf文件;
3.        (可选)选择Auto Erase在编程之前擦除flash芯片;
4.        (可选)选择Auto Verify在编程之后进行验证;
5.        (可选)选择Run After Program在编程之后复位MCU;
6.        (可选)在Flash Offset中,指定数据存放的起始偏移地址;
7.        点击Program按钮。

擦除
可以擦除单个或多个扇区。
1.        在下拉选框中选择flash算法。(多个算法时)
2.        在Flash Sector Map中选择想要擦除的扇区。
3.        点击Erase按钮。

校验flash中的内容
将flash里的内容与所要烧写的文件进行比较。
1.        在Data File中,输入映像文件,只支持.bin或.elf文件。
2.        点击Verify 按钮。

空白检测
可以检测一个或多个扇区。
1.        在下拉选框中选择flash算法。(多个算法时)
2.        在Flash sector map中选择想要检测的扇区。
3.        点击Blank Check 按钮。

什么是flash编程算法
flash编程算法就是一小段代码,它用来把程序写入到flash存储器中,并处理一些设备信息。

CoFlash的机制

程序运行时将执行以下步骤:
1.        CoFlash将flash引导程序下载到目标板的RAM中。
2.        CoFlash读取应用程序代码,并把它们写入到RAM中(映像数据的缓冲区)。
3.        CoFlash开始执行flash驱动程序。
4.        Flash驱动程序把RAM里的映像数据烧写到flash存储器中。
5.        Flash编程结束。

设置使用自己的flash编程算法
        命令行模式:通过”--driver=FILE”选项。
        图形用户界面模式:在Config选项卡的Flash Driver框中指定自定义的算法文件。

程序结构


编译自定义的flash引导程序

1.        安装ARMGCC编译器。
2.        复制CoFlash\FlashAlgorithm\source\template文件夹,然后重命名它。
3.        编写自定义的FlashInit, FlashUnInit, FlashEraseChip, FlashEraseSector, FlashProgramPage, FlashVerify函数。
4.        在gccProject/makefile文件中修改FLASH_CHIP的值为目标算法的文件名。
5.        通过命令行进入gccProject目录,然后在命令行运行make命令,这时自定义的算法文件将会出现在FlashAlgorithm目录下面。

flash编程算法的API

Flash设备描述符的结构体:struct FlashSector
{
    unsigned long size;                                  // Sector Size in Bytes
    unsigned long addr;                                 // Address of Sector
};
// Flash Device Info
struct FlashDevice
{
    unsigned long type;                                  // Flash Device Type
    unsigned long baseAddr;                            // Flash Device Base Address
    unsigned long totalSize;                           // Flash Device Total Size(Bytes)
    unsigned long pageSize;                           // Page Size(Bytes)
    unsigned char initialVal;                              // Initial Vaule of Erased Memory
    struct FlashSector sectors;   // Sectors
};
struct FlashAlgorithm
{
    unsigned long version;   
    // Algorithm Version (FLASH_FRAMEWORK_VERSION << 16 | YourVersion)
    char description;    // Description of the Algorithm
    struct FlashDevice deviceInfo;
};如果flash设备中的所有扇区的大小都是一样的,那么您只需要指定一次扇区的大小,并设置扇区的起始地址为一个非法的值0xFFFFFFFF,参见模板里的描述。否则,您需要一一列举出所有的扇区的大小和起始地址。FlashInit
int FlashInit (unsigned long baseAddr,unsigned long clk, unsigned long operateFuc)
* @brief         Initialize before Flash Programming/Erase Functions
* @param    baseAddr   Flash device base address.
* @param    clk            Flash program clock.
* @param    operateFucInit for what operation                            (FLASH_OPT_ERASECHIP/FLASH_OPT_ERASESECTORS/FLASH_OPT_PROGRAMPAGE/ FLASH_OPT_VERIFY/ FLASH_OPT_BLANKCHECK).
* @paramNone
* @retval         0                All is OK.
* @retval         others         Some error occurs.
* @details      This function is called before flash programming/erase.
FlashUnInit
int FlashUnInit(unsigned long operateFuc)
* @brief         Un-Init after Flash Programming/Erase…Functions
* @param    operateFuc    Init for what operation                         (FLASH_OPT_ERASECHIP/FLASH_OPT_ERASESECTORS/FLASH_OPT_PROGRAMPAGE/ FLASH_OPT_VERIFY/ FLASH_OPT_BLANKCHECK).
* @paramNone
* @retval         0                  All is OK.
* @retval         others         Some error occurs.            
* @details      This function is called after flash programming/erase….
FlashEraseChip
int FlashEraseChip (void)
* @brief            Erase the full chip
* @param   None
* @param   None
* @retval          0            All is OK.
* @retval          others       Some error occurs.            
* @details   
FlashEraseSector
int FlashEraseSector (unsigned long sectorAddr)
* @brief             Erase the select Sector
* @param      sectorAddr   Sector's start address.
* @param    None
* @retval         0            All is OK.
* @retval         others       Some error occurs.            
* @details   
FlashProgramPage
int FlashProgramPage (unsigned long pageAddr, unsigned long size, unsigned char *buf)
* @brief             Proram a page
*@param       pageAddr    Page's start address
*@param       size         Page size
*@param       buf            source buf point
*@param   None
* @retval         0            All is OK.
* @retval         others       Some error occurs.            
* @details   
FlashVerify可选的功能。当没有实现该功能时,colink将会直接读取flash存储器里的数据进行校验。int FlashVerify(unsigned long verifyAddr,unsigned long size,unsigned char *buf)
* @brief            Page Verify Function
* @param   verifyAddr   Verify Start Address(Usually page start address)
* @param   size             Verify size
* @param   buf            source buf point
* @param   None
* @retval          0               Verify pass.
* @retval          others          Some error occurs or verify failed.            
* @details
FlashBlankCheck可选的功能。当没有实现该功能时,colink将会直接读取flash存储器里的数据进行空白检测。int FlashBlankCheck (unsigned long checkAddr,unsigned long size)
* @brief             Page Blank Check Function
* @param      checkAddr    Check Start Address(Usually page start address)
* @param      size             Check size
* @param    None
* @retval         0                Check pass.
* @retval         others         Some error occurs or Check failed.   
* @ details   
* @note             Sector can be significant.We check the page rather than the sector, having regard to the actual size of the ram.今天的内容就这么多,最后要说的就是,讲的这些内容CooCox的网上上面都有,网址分别是:
http://www.coocox.com/CN/CoFlash_Programmer.htm
http://www.coocox.com/CN/Colinkex.htm

wo_lkh 发表于 2012-9-19 13:20:30

记号,我想diy一个coocox下载器

chenzhm 发表于 2012-9-19 13:25:15

:D:D:P越发复杂了

liamjeal 发表于 2012-9-19 14:13:51

wo_lkh 发表于 2012-9-19 13:20 static/image/common/back.gif
记号,我想diy一个coocox下载器

恩,官网上面PCB之类的都有

liamjeal 发表于 2012-9-19 14:14:17

chenzhm 发表于 2012-9-19 13:25 static/image/common/back.gif
越发复杂了

:D下载调试器必须得有啊
页: [1]
查看完整版本: coocox系列课程-Colinkex&coflash