极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6740|回复: 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的图片吧,相信很多人都看过了,
Cookie111.png
当然,大家有任何colinkex都可以用,单个colinkex,colinkex和LPC1114的拼版,colinkex和LPC11C1x的拼版都行。
需要做以下准备工作,
如果没有安装CoCenter,先安装,方法以前的课程讲过。
安装完成打开登录CoCenter。
打开CooCox CoCenter如图,它会自动检测电脑上是否安装了coocox的相应软件,目前管理软件列表里面有CoIDE, CoFlash, CoSmart, CoOS,  ColinkEx for MDK插件,ColinkEx的USB驱动。
cocenter.png
本次课程需要用到的就是coide、CoFlash、ColinkEx for MDK插件,ColinkEx的USB驱动。需要先下载安装这些。
安装ColinkEx的USB驱动需要注意以下问题:选择 ColinkExUsbDriver 版本
aaaaaa.png
准备好这些之后,我们开始讲colinkex在coide的应用:

Coide的应用很简单,很方便,用colinkex的话,只需要在调试配置里面设置一下就可以了。如图:
ccccccccc.png
先找到配置按钮。
然后配置为:
ddddd.png
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"。
eeeeeee.png
3.        点击Settings,Adapter选择"Colink或者ColinkEx"。如果您使用NuLink或NuLinkMe,Adapter应该选择"Nulink"。
ffffff.png
4.        如果您想在Flash中调试您的程序,您还需要配置Utilities选项,选择"CooCox Debugger"。
gggggg.png
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..."。
hhhhhhhh.png
3.        在Category中点击"Debugger"选项,"Driver"菜单中选择RDI。
iiiiiiii.png
4.        在Category中点击"RDI",在"Manufacturer RDI driver"菜单中选择CoRDI.dll 文件。
jjjjjjj.png
5.        在菜单栏的RDI选项中打开配置对话框,"Debug Target"选择Colink,CoLinkEx或 Nulink。
kkkkkkk.png
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

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

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

配置
在使用CoFlash进行flash编程之前,需要进行以下配置:
1.        在MCU树形列表中选择你所使用的MCU;
2.        配置 USB调试器;
3.        添加/移除flash算法(支持多算法),非必选操作。
mmmmmmmm.png
编程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按钮。
nnnnnnnnn.png
擦除
可以擦除单个或多个扇区。
1.        在下拉选框中选择flash算法。(多个算法时)
2.        在Flash Sector Map中选择想要擦除的扇区。
3.        点击Erase按钮。
ooooooo.png
校验flash中的内容
将flash里的内容与所要烧写的文件进行比较。
1.        在Data File中,输入映像文件,只支持.bin或.elf文件。
2.        点击Verify 按钮。
ppppppppp.png
空白检测
可以检测一个或多个扇区。
1.        在下拉选框中选择flash算法。(多个算法时)
2.        在Flash sector map中选择想要检测的扇区。
3.        点击Blank Check 按钮。

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

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

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

程序结构
rrrrr.png

编译自定义的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

回复

使用道具 举报

发表于 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|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2019-6-19 09:23 , Processed in 0.053203 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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