0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于J-Link解除APM32F003读保护

Geehy极海半导体 来源:Geehy极海半导体 作者:Geehy极海半导体 2022-09-20 14:49 次阅读

前言

最近拿到了一块APM32F003F6 MINI开发板,发现其在同价位的芯片中有着丰富的资源和优秀的低功耗水平。准备拿来做一些小产品的开发。

1 APM32F003的读保护设置

在开发过程中,发现其对代码保护如同APM32F4一样,可以设置读保护。如其手册描述,APM32F003支持写保护和读保护。

8f424492-37f4-11ed-ba43-dac502259ad0.png

通过手册描述和使用相关的库函数,我们可以将库函数封装,方便我们一个指令进行读写保护。

/*! * [url=home.php?mod=space&uid=247401]@brief[/url] Flash Read Out Protection Config. * * @param rdp : Set the chip read protection level * This parameter can be one of the following variables: * FMC_RDP_ENABLE : Enable read protection * FMC_RDP_DISABLE : Disable read protection * * @retval None * * @note */ void ReadOutProtectionConfig(FMC_RDP_T rdp) { FMC_Unlock(); FMC_ConfigReadOutProtection(rdp); FMC_Lock(); }

在我们的功能函数里面对ReadOutProtectionConfig()函数进行调用即可完成对芯片的读写保护。如:

以上代码是实现了一个读保护设置后,闪灯5下后解除读保护。(值得注意的是:APM32F003手册是说明“在配置完选项字节后,需要复位才能生效 ”)。

2 为什么需要使用J-Link解除APM32F003读保护

由于我们的代码出厂后不想让有心之人看到我们的二进制内容,我们会对芯片进行读保护,且不会留解除读保护的“后门”,以防用户误操作将产品弄坏。所以我们迫切需要一个工具能够在开发,维护阶段,在没有设置解除读保护的“后门”的情况下对芯片进行解除读保护操作。

而在开发阶段,我们最常用的工具就是J-Link,如何使用J-Link解决该问题便是我们的需求。

3 J-Link解除读保护的原理

书接上回“https://bbs.21ic.com/icview-3223010-1-1.html”我在J-Link的安装目录下面找到了相应J-Link的使用手册。我们可以在手册中看到,对使用J-Link Commander给芯片下载代码的一个例子。

8f963228-37f4-11ed-ba43-dac502259ad0.png

(图片来源:[J-Link Commander - SEGGER Wiki](https://wiki.segger.com/J-Link_Commander#Perform_flash_download))

在例子中我们可以看到-Link Commander使用了“w4”指令对STM32F103ZE的一些外设进行了写值设置,以使得可以下载STM32F103ZE的外置Flash。

同理我们也可以依葫芦画瓢,理论上我们可以通过将我们对APM32F003芯片的解除写保护的代码。

4 APM32F003解除读保护分析

下面我们看一下官方源码中对于解除读保护,我们操作了那些寄存器

- FMC_Unlock()函数内容

void FMC_Unlock(void)

{

FMC->KEY = FMC_KEY_1;

FMC->KEY = FMC_KEY_2;

}

对FMC 关键字(FMCwKey)写入解锁的键值以解锁 FMC。

- FMC_EraseOptionByte()函数内容

FMC_STATE_T FMC_EraseOptionByte(void)

{

uint16_t rpKey;

FMC_STATE_T state;

rpKey = FMC->OBCS_B.READPROT ? 0 : FMC_RP_KEY;

state = FMC_WaitForReady(FMC_DELAY_ERASE);

if(state == FMC_STATE_COMPLETE)

{

FMC->OBKEY = FMC_KEY_1;

FMC->OBKEY = FMC_KEY_2;

FMC->CTRL2_B.OBE = BIT_SET;

FMC->CTRL2_B.STA = BIT_SET;

state = FMC_WaitForReady(FMC_DELAY_ERASE);

if(state == FMC_STATE_COMPLETE)

{

FMC->CTRL2_B.OBE = BIT_RESET;

FMC->CTRL2_B.OBP = BIT_SET;

OB->READPROT = rpKey;

state = FMC_WaitForReady(FMC_DELAY_PROGRAM);

if(state != FMC_STATE_TIMEOUT)

{

FMC->CTRL2_B.OBP = BIT_RESET;

}

}

else if(state != FMC_STATE_TIMEOUT)

{

FMC->CTRL2_B.OBE = BIT_RESET;

}

}

return state;

}

1. 对FMC的OBKEY写入解锁键值以解锁对OB的操作。

2. 通过FMC的CTRL2寄存器,擦除选项字节。

3. 写入读保护等级至OB的READPROT寄存器,然后通过FMC的CTRL2寄存器进行编程

4. 等待编程完成。

- FMC_Lock函数内容

void FMC_Lock(void) { FMC->CTRL2_B.LOCK = BIT_SET; }

通过FMC的CTRL2寄存器的LOCK位写1,锁定FMC的CTRL2寄存器。

5 J-Link 解除 APM32F003读保护实现

有了解除读保护的C代码,我们简单的就可以将其“翻译”成J-Link的指令。下面是各个部分指令情况及其解析。

1. 规定选择的连接接口,连接的目标芯片类型及相应的连接速度(必须)。

si 1

device CORTEX-M0

speed 100

JTAGConfg -1,-1

2. 停止运行当前芯片的程序(一般而言初始连接上芯片时,程序均处于暂停暂停),保证芯片没有在进行中的Flash操作(必须)。

h

r

h

3. 解锁代码的指令实现(必须)。

w4 0x40011004 0x45670123

w4 0x40011004 0xCDEF89AB

w4 0x40011008 0x45670123

w4 0x40011008 0xCDEF89AB

sleep 100

w4 0x40011010 0x00000220

w4 0x40011010 0x00000260

sleep 100

w4 0x40011010 0x00000200

w4 0x40011010 0x00000210

w4 0x00020400 0xFFFF00A5

sleep 100

w4 0x40011010 0x00000080

4. 读取FMC的CTRL2寄存器内容,看看是否回到复位值(非必须)。

mem32 0x40011010 0x01

sleep 10

5. 复位芯片以使解除读保护操作生效(必须)。

r

我们新建一个文本文件,将上述代码保存至文件,然后将文件后缀名更改为“.jflash”(详情请查阅附件),最后使用“JLink.exe”打开即可(硬件要连接好)。对已经上了读保护的APM32F003芯片进行解除读保护操作。

8fdf43be-37f4-11ed-ba43-dac502259ad0.png

6 注意事项

1. 芯片上读保护后使用Keil的下载命令会有如下提示弹框。

901d6bbc-37f4-11ed-ba43-dac502259ad0.png

2. 使用本脚本文件,需保证硬件连接正常。

/*! * [url=home.php?mod=space&uid=247401]@brief[/url] Main program * * @param None * * @retval None * * @note */ int main(void) { uint32_t i = 0; LedInit(); /* Enable read protection */ ReadOutProtectionConfig(FMC_RDP_ENABLE); for (i = 0; i < 10; i++)     {     Delay(0x7ffff);     Board_LedToggle(BOARD_LED2);     Board_LedToggle(BOARD_LED3);     }       /* Disable read protection */     ReadOutProtectionConfig(FMC_RDP_DISABLE);       while (1)    {      } }

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    455

    文章

    50714

    浏览量

    423118
  • 函数
    +关注

    关注

    3

    文章

    4327

    浏览量

    62569
  • 代码
    +关注

    关注

    30

    文章

    4779

    浏览量

    68519

原文标题:APM32芯得 EP.09 | 使用J-Link解除APM32F003的读保护

文章出处:【微信号:geehysemi,微信公众号:Geehy极海半导体】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    极海半导体APM32系列工业级通用MCU又添新品,基于M0+内核F003系列新品发布

    工业级APM32F003系列MCU,驱动智能家电性能全面升级
    发表于 06-22 07:58 6751次阅读

    关于在KEIL下使用j-link不到芯片的问题 精选资料分享

    关于在KEIL下使用j-link不到芯片的问题问题概述:硬件设备:正点原子号令者i.MX RT1052开发板j-link固件版本:V9.40实验目的:是使用j-link v9给开发板
    发表于 07-23 07:26

    j-link 仿真烧录驱动

    j-link 仿真烧录驱动
    发表于 01-14 02:07 22次下载

    J-LinkJ-Trace用户指南免费下载

    J-Link/J-Trace有不同的版本,每个版本都是为不同的目的/目标设备设计的。目前,J-Link/J-Trace有以下几种型号:J-Link
    发表于 03-03 08:00 14次下载
    <b class='flag-5'>J-Link</b>和<b class='flag-5'>J</b>-Trace用户指南免费下载

    J-Link script的组成

    脚本语言不需要编译,它由解释器动态解释执行。J-Link Commander(路径C:Program Files (x86)SEGGERJLinkJLink.exe)是一个解释器,负责对J-Link script文件进行解释。
    的头像 发表于 03-09 10:57 2136次阅读

    教你轻松J-Link不能连接目标MCU的问题

    J-Link是嵌入式软件、硬件工程师最常用的工具之一,但是,在使用这个工具时,也会遇到各种各样的问题。 今天来给大家讲讲最常见的一个问题:J-Link不能连接目标MCU。 J-Link的连接
    的头像 发表于 06-30 11:18 5886次阅读
    教你轻松<b class='flag-5'>J-Link</b>不能连接目标MCU的问题

    如何处理J-Link不能连接目标MCU的问题?

    J-Link是嵌入式软件、硬件工程师最常用的工具之一,但是,在使用这个工具时,也会遇到各种各样的问题。今天来给大家讲讲最常见的一个问题:J-Link不能连接目标MCU。J-Link的连接使...
    发表于 10-29 10:21 8次下载
    如何处理<b class='flag-5'>J-Link</b>不能连接目标MCU的问题?

    基于J-Link Remote Server软件的远程调试方法

    SEGGER提供了一个J-Link Remote Server软件,可以使得在任何地方连接J-Link调试应用。J-Link Remote Server提供了图形界面和命令行的版本,支持
    的头像 发表于 06-14 08:56 2149次阅读

    apm32f003替换STM32进行低成本系统开发

    STM32F003是基于Arm Cortex-M0内核的32位MCU,工作电压为2.4-3.6V,主频48MHz,内置16KB Flash、定时器、ADC、通信接口。由于STM32货源紧张,国产替代方案持续火热,APM32F003系列MCU就是最有利的竞品。
    的头像 发表于 07-07 10:38 3686次阅读
    用<b class='flag-5'>apm32f003</b>替换STM32进行低成本系统开发

    J-Link添加Geehy芯片

    最近调试Geehy的APM32芯片想着替换STM32,发现在使用Keil+J-Link的调试过程中总是发现J-Link会在初次下载的时候提示
    的头像 发表于 07-25 14:57 5246次阅读

    J-Link script的组成与使用方法

    J-Link作为被广泛使用的调试器,提供了多种配套的软件工具。例如命令配置软件J-Link Commander,GDB server,J-Flash等。其中,J-Link Comman
    的头像 发表于 08-01 12:20 2534次阅读

    J-Link中的JTAG接口的正确使用注意事项

    所有标记为NC的针脚均未连接在J-Link内部。这里可以应用任何信号;J-Link将忽略这种信号。引脚4、6、8、10、12、14、16、18、20是连接到J-Link中GND的GND引脚。它们还应连接到目标系统中的GND。
    的头像 发表于 09-23 09:57 3255次阅读
    <b class='flag-5'>J-Link</b>中的JTAG接口的正确使用注意事项

    APM32F003F6P6_调试问题_5V电源供电时J-Link无法识别与连接

    APM32F003F6P6_调试问题_5V电源供电时J-Link无法识别与连接
    发表于 11-09 21:04 1次下载
    <b class='flag-5'>APM32F003F</b>6P6_调试问题_5V电源供电时<b class='flag-5'>J-Link</b>无法识别与连接

    ST-Link也能当J-Link​使用?​

    之前分享过一篇文章《CMSIS-DAP和J-Link、ST-Link是什么关系》,文中提到了 J-Link 和 ST-Link 的 DAP 协议一样。
    的头像 发表于 03-13 11:12 3155次阅读
    ST-<b class='flag-5'>Link</b>也能当<b class='flag-5'>J-Link</b>​使用?​

    极海APM32F003 MCU通过IEC 60730/60335功能安全认证

    近日,极海APM32F003系列工业级超值型MCU,已顺利通过IEC 60730/60335功能安全认证,并可提供符合CLASS B标准的功能安全设计套件,有助于客户减少认证时间与成本,快速推出稳定可靠的终端产品。
    的头像 发表于 01-08 18:04 914次阅读
    极海<b class='flag-5'>APM32F003</b> MCU通过IEC 60730/60335功能安全认证