极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 23008|回复: 4

coocox系列课程-Colinkex&coflash

[复制链接]
发表于 2012-9-19 09:54:30 | 显示全部楼层 |阅读模式
本帖最后由 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。
购买的话你可以给market@coocox.com 发一封邮件
当然,肯定很多人都比较关注如何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这东西,多说没用,要动手实践,有问题邮件联系,master@CooCox.com
或者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设备描述符的结构体:
  1. struct FlashSector
  2. {
  3.     unsigned long size;                                  // Sector Size in Bytes
  4.     unsigned long addr;                                 // Address of Sector
  5. };
  6. // Flash Device Info
  7. struct FlashDevice
  8. {
  9.     unsigned long type;                                  // Flash Device Type
  10.     unsigned long baseAddr;                            // Flash Device Base Address
  11.     unsigned long totalSize;                             // Flash Device Total Size(Bytes)
  12.     unsigned long pageSize;                             // Page Size(Bytes)
  13.     unsigned char initialVal;                              // Initial Vaule of Erased Memory
  14.     struct FlashSector sectors[FLASH_SECTORS_NUM];   // Sectors
  15. };
  16. struct FlashAlgorithm
  17. {
  18.     unsigned long version;   
  19.     // Algorithm Version (FLASH_FRAMEWORK_VERSION << 16 | YourVersion)
  20.     char description[FLASH_ALGO_DESC_SIZE];    // Description of the Algorithm
  21.     struct FlashDevice deviceInfo;
  22. };
复制代码
如果flash设备中的所有扇区的大小都是一样的,那么您只需要指定一次扇区的大小,并设置扇区的起始地址为一个非法的值0xFFFFFFFF,参见模板里的描述。否则,您需要一一列举出所有的扇区的大小和起始地址。
  1. FlashInit
  2. int FlashInit (unsigned long baseAddr,unsigned long clk, unsigned long operateFuc)
  3. * @brief           Initialize before Flash Programming/Erase Functions
  4. * @param[in]    baseAddr     Flash device base address.
  5. * @param[in]    clk              Flash program clock.
  6. * @param[in]    operateFuc  Init for what operation                            (FLASH_OPT_ERASECHIP/FLASH_OPT_ERASESECTORS/FLASH_OPT_PROGRAMPAGE/ FLASH_OPT_VERIFY/ FLASH_OPT_BLANKCHECK).
  7. * @param[out]  None
  8. * @retval         0                All is OK.
  9. * @retval         others         Some error occurs.
  10. * @details        This function is called before flash programming/erase.
  11. FlashUnInit
  12. int FlashUnInit(unsigned long operateFuc)
  13. * @brief           Un-Init after Flash Programming/Erase…  Functions
  14. * @param[in]    operateFuc    Init for what operation                         (FLASH_OPT_ERASECHIP/FLASH_OPT_ERASESECTORS/FLASH_OPT_PROGRAMPAGE/ FLASH_OPT_VERIFY/ FLASH_OPT_BLANKCHECK).
  15. * @param[out]  None
  16. * @retval         0                  All is OK.
  17. * @retval         others           Some error occurs.            
  18. * @details        This function is called after flash programming/erase….
  19. FlashEraseChip
  20. int FlashEraseChip (void)
  21. * @brief            Erase the full chip
  22. * @param[in]     None
  23. * @param[out]   None
  24. * @retval          0              All is OK.
  25. * @retval          others       Some error occurs.            
  26. * @details     
  27. FlashEraseSector
  28. int FlashEraseSector (unsigned long sectorAddr)
  29. * @brief             Erase the select Sector
  30. * @param[in]      sectorAddr   Sector's start address.
  31. * @param[out]    None
  32. * @retval           0              All is OK.
  33. * @retval           others       Some error occurs.            
  34. * @details     
  35. FlashProgramPage
  36. int FlashProgramPage (unsigned long pageAddr, unsigned long size, unsigned char *buf)
  37. * @brief             Proram a page
  38. *@param[in]       pageAddr    Page's start address
  39. *@param[in]       size           Page size
  40. *@param[in]       buf            source buf point
  41. *@param[out]     None
  42. * @retval           0              All is OK.
  43. * @retval           others       Some error occurs.            
  44. * @details     
  45. FlashVerify
复制代码
可选的功能。当没有实现该功能时,colink将会直接读取flash存储器里的数据进行校验。
  1. int FlashVerify(unsigned long verifyAddr,unsigned long size,unsigned char *buf)
  2. * @brief            Page Verify Function
  3. * @param[in]     verifyAddr     Verify Start Address(Usually page start address)
  4. * @param[in]     size             Verify size
  5. * @param[in]     buf              source buf point
  6. * @param[out]   None
  7. * @retval          0                 Verify pass.
  8. * @retval          others          Some error occurs or verify failed.            
  9. * @details  
  10. FlashBlankCheck
复制代码
可选的功能。当没有实现该功能时,colink将会直接读取flash存储器里的数据进行空白检测。
  1. int FlashBlankCheck (unsigned long checkAddr,unsigned long size)
  2. * @brief             Page Blank Check Function
  3. * @param[in]      checkAddr    Check Start Address(Usually page start address)
  4. * @param[in]      size             Check size
  5. * @param[out]    None
  6. * @retval           0                Check pass.
  7. * @retval           others         Some error occurs or Check failed.   
  8. * @ details     
  9. * @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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2012-9-19 13:20:30 | 显示全部楼层
记号,我想diy一个coocox下载器
回复 支持 反对

使用道具 举报

发表于 2012-9-19 13:25:15 | 显示全部楼层
越发复杂了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-19 14:13:51 | 显示全部楼层
wo_lkh 发表于 2012-9-19 13:20
记号,我想diy一个coocox下载器

恩,官网上面PCB之类的都有
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-19 14:14:17 | 显示全部楼层
chenzhm 发表于 2012-9-19 13:25
越发复杂了

下载调试器必须得有啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2022-6-26 13:53 , Processed in 0.046224 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表