|
今天就介绍第三部分,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的图片吧,相信很多人都看过了,
昨天 09:36 上传
下载附件
当然,大家有任何colinkex都可以用,单个colinkex,colinkex和LPC1114的拼版,colinkex和LPC11C1x的拼版都行。
需要做以下准备工作,
如果没有安装CoCenter,先安装,方法以前的课程讲过。
安装完成打开登录CoCenter。
打开CooCox CoCenter如图,它会自动检测电脑上是否安装了coocox的相应软件,目前管理软件列表里面有CoIDE, CoFlash, CoSmart, CoOS, ColinkEx for MDK插件,ColinkEx的USB驱动。
昨天 09:42 上传
下载附件
本次课程需要用到的就是coide、CoFlash、ColinkEx for MDK插件,ColinkEx的USB驱动。需要先下载安装这些。
安装ColinkEx的USB驱动需要注意以下问题:选择 ColinkExUsbDriver 版本
准备好这些之后,我们开始讲colinkex在coide的应用:
Coide的应用很简单,很方便,用colinkex的话,只需要在调试配置里面设置一下就可以了。如图:
昨天 09:56 上传
下载附件
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..."。
昨天 10:01 上传
下载附件
3. 在Category中点击"Debugger"选项,"Driver"菜单中选择RDI。
昨天 10:02 上传
下载附件
4. 在Category中点击"RDI",在"Manufacturer RDI driver"菜单中选择CoRDI.dll 文件。
昨天 10:02 上传
下载附件
. 在菜单栏的RDI选项中打开配置对话框,"Debug Target"选择Colink,CoLinkEx或 Nulink。
昨天 10:03 上传
下载附件
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
支持的调试器如图:
昨天 10:11 上传
下载附件
要使用coflash,你有至少一个调试器,需要注意的是:并不是所有的调试器,都支持左边的所有芯片。
Coflash支持图形化界面和命令行模式,两种方式,下面我主要从图形化界面来讲:
Cookie板子为例,芯片当然选择M0516ZN,调试器选择colinkex,其他的配置可以采用默认值。配置好之后进入command页面进行具体操作。
CoFlash 图形用户界面的功能:
配置
编程 擦除 校验 空白检测
配置
在使用CoFlash进行flash编程之前,需要进行以下配置:
1. 在MCU树形列表中选择你所使用的MCU;
2. 配置 USB调试器;
3. 添加/移除flash算法(支持多算法),非必选操作。
昨天 10:23 上传
下载附件
编程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 按钮。
昨天 10:26 上传
下载附件
空白检测
可以检测一个或多个扇区。
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[FLASH_SECTORS_NUM]; // Sectors
- };
- struct FlashAlgorithm
- {
- unsigned long version;
- // Algorithm Version (FLASH_FRAMEWORK_VERSION << 16 | YourVersion)
- char description[FLASH_ALGO_DESC_SIZE]; // 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[in] baseAddr Flash device base address.
- * @param[in] clk Flash program clock.
- * @param[in] operateFuc Init for what operation (FLASH_OPT_ERASECHIP/FLASH_OPT_ERASESECTORS/FLASH_OPT_PROGRAMPAGE/ FLASH_OPT_VERIFY/ FLASH_OPT_BLANKCHECK).
- * @param[out] None
- * @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[in] operateFuc Init for what operation (FLASH_OPT_ERASECHIP/FLASH_OPT_ERASESECTORS/FLASH_OPT_PROGRAMPAGE/ FLASH_OPT_VERIFY/ FLASH_OPT_BLANKCHECK).
- * @param[out] None
- * @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[in] None
- * @param[out] None
- * @retval 0 All is OK.
- * @retval others Some error occurs.
- * @details
- FlashEraseSector
- int FlashEraseSector (unsigned long sectorAddr)
- * @brief Erase the select Sector
- * @param[in] sectorAddr Sector's start address.
- * @param[out] 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[in] pageAddr Page's start address
- *@param[in] size Page size
- *@param[in] buf source buf point
- *@param[out] 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[in] verifyAddr Verify Start Address(Usually page start address)
- * @param[in] size Verify size
- * @param[in] buf source buf point
- * @param[out] 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[in] checkAddr Check Start Address(Usually page start address)
- * @param[in] size Check size
- * @param[out] 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
|
|