还可以这样玩?极海半导体APM32F411系列MCU与pyocd的火花

2024-08-29 Geehy极海半导体公众号
MCU,VCTINY板,APM32,APM32F411 MCU,VCTINY板,APM32,APM32F411 MCU,VCTINY板,APM32,APM32F411 MCU,VCTINY板,APM32,APM32F411

APM32芯得 EP.34 | 还可以这样玩?APM32F411与pyocd的火花

1、背景

前段时间笔者学习了一下如何使用pyocd配合APM32F411VCTINY板在命令行下给它进行各种骚操作,在使用一段时间后就想着:pyocd是基于python的,那是不是也可以使用python脚本+pyocd使用起来呢?


完成大家的一些重复的操作的自动化(因为笔者比较懒),嘿嘿。想到就去做。


2、pyocd的python api

之前有介绍pyocd的时候发现遗漏了pyocd的api没有看,它还给了利用python+pyocd的一些例子(https://pyocd.io/docs/api_examples.html)。比如下载bin文件的例子。


本文档就对近段时间笔者学习到的pyocd+python,基于APM32F411TINY板的一些收获。由于笔者也是初学python,里面的一些不科学的操作,也请大家指出斧正。此致感谢!


2.1 连接

首先是连接的API:session_with_chosen_probe()


这个api主要是控制我们选择哪个link去连接目标芯片,可以使用link的UID去指定,比如说这里的link UID是:00350054500000144e5448590258(注:可以在CMD命令行用:pyocd list命令查看)。


那这里设置指定使用笔者的Geehy CMSIS-DAP WinUSB的设置就是:

ConnectHelper.session_with_chosen_probe(unique_id='00350054500000144e5448590258')


2.2 程序控制

让程序停下

target.halt()

让程序继续运行

target.resume()


2.3 数据读取

数据的读取指令可以使用:

target.read32(address)

这个可以读取我们MCU的flash、ram、外设寄存器等内容。

我们也可以使用指令:

target.read_core_register("pc")

读取我们程序的运行到的地方。


2.4 数据写入

数据的写入,我们可以使用:

target.write32(address,data)

这个可以对我们MCU的fram、外设寄存器等可以直接写入内容的地址进行操作。

Q:为什么不能直接对Flash进行直接写入?

A:因为flash的写入其实是flash控制器(解锁、控制、状态等寄存器),去进行的。我们通过swd的指令只能通过操作flash的控制器,从而才能对Flash进行写入。


3、程序设计

笔者这里设计了两个程序,对学习到的知识进行验证。


3.1 读取PE5/6的状态

这个程序笔者设想的是,APM32F411VCTINY板已经下载了一个LED闪烁的程序,笔者需要知道LED当前的一个状态。这个其实可以类比于一个黑盒子(芯片端),我们在不开盒子的情况下去获取我们想知道的寄存器信息。


程序的基本设计流程:

1. 连接APM32F411VC,

2. 读取GPIOE的ODATA寄存器,用于判断PE5/PE6的高低电平。

3. 输出寄存器内容,PE5/PE6的状态,以及相应的PC的内容。

程序如下:

import time

from pyocd.core.helpers import ConnectHelper

# Replace the following string with your target device serial number

TARGET_DEVICE_SERIAL_NUMBER = '00350054500000144e5448590258'

# APM32F411 GPIOE base address and ODATA offset

GPIOE_BASE = 0x40021000

GPIOE_ODATA_OFFSET = 0x14

# Connect to the target device with the specified serial number

with ConnectHelper.session_with_chosen_probe(unique_id=TARGET_DEVICE_SERIAL_NUMBER) as session:

# Get the target object

board = session.board

target = board.target

# ensure the target device in the running state

target.resume()

# Compute the address of the ODATA register

gpioe_odata_address = GPIOE_BASE + GPIOE_ODATA_OFFSET

# Monitor PE5 and PE6 pin status

# Monitor 10 times

for i in range(10): 

target.halt()

odata = target.read32(gpioe_odata_address)

pc = target.read_core_register("pc")

target.resume()

pe5 = (odata >> 5) & 0x1

pe6 = (odata >> 6) & 0x1

# Print the contents of the odata read

print("odata: %s " % bin(odata))

print(f'PE5: {"High" if pe5 else "Low"}, PE6: {"High" if pe6 else "Low"}')

# Read some registers.

print("pc: 0x%X" % pc)

print("")

# Wait 0.5 seconds

time.sleep(0.5) 


程序运行(vscode)起来得到的结果如下:


发现可以读取回来PE5/PE6的状态,且可以明确知道此时PC的内容。


3.2 解除/上锁APM32F411的读保护

由于我们的程序烧录进APM32F411后一般会对它进行读保护的操作,从而使得我们的程序不会被“有心人”读取**。

通过查阅APM32F411的手册,我们知道对其进行上读保护的操作的流程有:


1. 解锁选项字节编程区域;

2. 对读保护进行操作;

3. 重载选项字节。(PS:重载选项字节会引起复位,此时我们需要重新连接SWD,才能重新读取内容)

下面就根据这个流程对python脚本进行设计。


import time

from pyocd.core.helpers import ConnectHelper

# Replace the following string with your target device serial number

TARGET_DEVICE_SERIAL_NUMBER = '00350054500000144e5448590258'

# APM32F411 Option Bytes related register addresses and key values

FMC_OPTKEY = 0x40023C08

FMC_OPTCTRL = 0x40023C14

OPTCTRL_BYTE1_ADDRESS = FMC_OPTCTRL + 1 # Points to the second byte of OPTCTRL

FMC_OPT_KEY1 = 0x08192A3B

FMC_OPT_KEY2 = 0x4C5D6E7F

OB_RDP_LEVEL_1 = 0x55 # Level 1 read protection

OB_RDP_LEVEL_0 = 0xAA # No read protection

# Connect to the target MCU

with ConnectHelper.session_with_chosen_probe(unique_id=TARGET_DEVICE_SERIAL_NUMBER) as session:

target = session.board.target

# Read the current value of OPTCTRL

optctrl_value = target.read32(FMC_OPTCTRL)

rdp_level = target.read8(OPTCTRL_BYTE1_ADDRESS)  # Read the second byte directly

if rdp_level != OB_RDP_LEVEL_0:

print("Target MCU is already read protected")

else:

print("Target MCU is not read protected, proceeding with read protect operation...")

# Unlock Option Bytes programming

if optctrl_value & (1 << 0):  # Check the OPTLOCK bit

target.write32(FMC_OPTKEY, FMC_OPT_KEY1)

target.write32(FMC_OPTKEY, FMC_OPT_KEY2)

optctrl_value = target.read32(FMC_OPTCTRL)

print("optctrl_value: 0x%X" % optctrl_value)

# Set the read protection level (only modify the second byte)

target.write8(OPTCTRL_BYTE1_ADDRESS, OB_RDP_LEVEL_1)

# Start the Option Bytes programming

optctrl_value = target.read32(FMC_OPTCTRL)

optctrl_value |= (1 << 1)  # Set the OPTSTRT bit

print("optctrl_value: 0x%X" % optctrl_value)

target.write32(FMC_OPTCTRL, optctrl_value)

# Wait for programming to complete and trigger a reset

while True:

optctrl_value = target.read32(FMC_OPTCTRL)

if not (optctrl_value & (1 << 1)):  # Wait for the OPTSTRT bit to be cleared

break

# Perform a hardware reset of the target MCU

session.probe.reset()

# Wait 0.5 seconds

time.sleep(0.5) 

# Re-establish the connection after the reset

with ConnectHelper.session_with_chosen_probe(unique_id=TARGET_DEVICE_SERIAL_NUMBER) as new_session:

new_target = new_session.board.target

# Verify if read protection has been successfully set

new_optctrl_value = new_target.read32(FMC_OPTCTRL)

new_rdp_level = (new_optctrl_value >> 8) & 0xFF

if new_rdp_level == OB_RDP_LEVEL_1:

print("Read protect operation successful")

else:

print("Read protect operation failed")


脚本运行结果如下:


当然笔者也给大家准备了解锁的操作的脚本,脚本运行结果如下:



《APM32芯得》系列内容为工程师用户使用极海半导体APM32系列产品的经验总结,均转载自21ic论坛极海半导体专区,全文未作任何修改,未经原文作者授权禁止转载。

授权代理商:世强先进(深圳)科技股份有限公司
技术资料,数据手册,3D模型库,原理图,PCB封装文件,选型指南来源平台:世强硬创平台www.sekorm.com
现货商城,价格查询,交期查询,订货,现货采购,在线购买,样品申请渠道:世强硬创平台电子商城www.sekorm.com/supply/
概念,方案,设计,选型,BOM优化,FAE技术支持,样品,加工定制,测试,量产供应服务提供:世强硬创平台www.sekorm.com
集成电路,电子元件,电子材料,电气自动化,电机,仪器全品类供应:世强硬创平台www.sekorm.com
  • +1 赞 0
  • 收藏
  • 评论 0

本文由ll转载自Geehy极海半导体公众号,原文标题为:APM32芯得 EP.34 | 还可以这样玩?APM32F411与pyocd的火花,本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

评论

   |   

提交评论

全部评论(0

暂无评论

相关推荐

tandby模式下,如何唤醒MCU APM32的RTC与WKUP?

APM32F103系列低功耗模式有三种:睡眠模式、停止模式和待机模式。通过关闭内核、时钟源、设置调压器来降低功耗。本文极海半导体解析了APM32的tandby模式下的RTC唤醒与WKUP唤醒功能如何实现。

设计经验    发布时间 : 2024-01-27

【经验】APM32F4 MCU在RT-Thread系统上添加以太网驱动和使用LwIP网络组件的方法

本文详细介绍了如何将极海半导体APM32F4 MCU在RT-Thread系统上添加以太网驱动和使用LwIP网络组件,其他APM32带有以太网控制器的MCU,在RT-Thread使用LwIP网络功能也是大同小异的,按照这个过程基本都可以把网络功能应用起来。

设计经验    发布时间 : 2023-08-25

APM32芯得 EP.35 | APM32F411为什么要有ISP,你知道多少?

APM32F411支持ISP启动,适合在不同编程阶段使用。ISP不占额外flash,节省成本,且适用于量产和远程维护。该芯片支持USART/I2C/SPI/USB等多种通信总线进行flash编程,使用Geehy评估软件可轻松完成程序下载与运行。

设计经验    发布时间 : 2024-09-11

极海半导体APM32F407系列MCU支持国密算法,助力国产安全可控,适用于新能源等领域

极海推出的APM32F407系列MCU,结合当前环境要求,设计出了支持国密算法(SM2,SM3,SM4)的IP, 符合国家密码管理局认定和公布的密码算法标准及其应用规范,并凭借显著的性能优势,已应用至新能源、工业控制、医疗设备等众多领域。

厂牌及品类    发布时间 : 2023-01-07

【选型】APM32F411 MCU的电机控制方案可实现PMSM的无感FOC双电机控制,支持三电阻、单电阻电流采样

面向电机市场,极海半导体APM32F411 双电机控制系统提供了高适用性与高性价比的单芯片控制方案,以满足高端消费电子与工业控制领域的不同需求。随着电机应用产品智能化及物联网升级,极海半导体将持续在产品、方案与支持等各方面寻求创新,为用户打造优质的应用生态环境。

器件选型    发布时间 : 2023-08-22

极海半导体(Geehy Semiconductor)微控制器MCU选型指南(英文)

描述- Geehy Semiconductor Co., Ltd. is an IC Fabless company dedicated to developing industrial & automotive-grade MCUs, analog & mixed-signal ICs, and SoCs.

型号- APM32F030,APM32F051K6T6,APM32F4,APM32F405RGT6,APM32F003F6P6,APM32F003F6P7,APM32F103VET6,APM32E103,APM32F103VET7,APM32F051C6T6,APM32F0,APM32 SERIES,APM32F103RCT6,APM32F103RCT7,APM32E103RCT6,APM32E103VET6,APM32F105RCT6,APM32F035,APM32F407RGT6,GALT61120,APM32F030RCT6,APM32E103CET6,AGW32F103T4T6S,GW8811,APM32F407VET6,APM32A407ZGT7,GURC01,APM32A091RCT7,APM32F003F4U6,APM32A091,APM32F411VET6,APM32F051C6U6,APM32F103TBU7,APM32F103TBU6,APM32F107RBT6,G32A1445,APM32F051R8T6,APM32F417ZGT6,APM32F411CET6,G32A,APM32F405ZGT6,APM32F051K6U6,APM32M3514C8T7,APM32F030C8T6,G32A1445UAT0MLL,AGM32F103T4T6S,G32A1445UAT0MLH,APM32F103C8T6,APM32F103RBT7,APM32F411,GW3323HGU6,APM32F030K8T6,APM32F103RBT6,APM32A407,APM32F417,APM32F091CBU6,APM32M3514,APM32F407ZET6,APM32F072VBT6,APM32M3514C8U7,APM32E1,APM32,APM32F091CCU6,APM32E103CEU6,APM32F072R8T6,APM32F003F4M6,GW SERIES,APM32F107RCT6,APM32F072CBT6,APM32F407IGT6,APM32F003,APM32A103VET7,APM32F072CBT7,APM32F105RBT6,APM32F407,APM32F405,APM32F091,APW32F103T4T6S,APM32F405VGT6,APM32F035C8T7,GHD,APM32F072,APM32E103CCT6,APM32F103CCT6,APM32F051K8T6,APM32E103VCT6,APM32F051C8T6,APM32F072CBU6,APM32E103ZET6,GHD3125R,APM32F103VCT6,APM32F103ZET6,GEEHY-LINK,AP/GM/W32F103T4T6S,APM32F107VBT6,APM32A407VGT7,APM32A103,APM32F003F6U7,APM32F407RET6,APM32F407VGT6,GW3323,APM32F003F6U6,APM32F417IGT6,APM32F103T8U6,APM32F051K8U6,APM32F051C8U6,APM32F107,APM32F4T1RET6,APM32F105,APM32F105VCT6,APM32F103,APM32F417VGT6,GHD3440R5,APM32F051R6T6,APM32F103RET6,GHD3440R3,APM32F003F4P6,APM32F035K8T7,GURC,APM32F030CCT6,APM32F030C6T6,APM32F103R8T6,GALT,APM32F051,APM32F103CBT7,G32A1465UAT0MLL,APM32F103CBT6,GHD3440QE,G32A1465UAT0MLH,APM32F030K6T6,APM32F030R8T6,APM32F103VBT6,APM32F030K6T7,APM32F072C8T6,APM32F107VCT6,APM32F103T4T6S,APM32A103CBT7,APM32EF1,APM32F411CEU6,GW8811KEU6,GW8811CEU6,APM32F407ZGT6,APM32F072RBT6,APM32F072RBT7,APM32F003F6M6,GHD3440PF,APM32F407IGH6,APM32E103CCU6,GHD1620T,APM32A103RET7,APM32F105VBT6,APM32F030K6U6,GW,APM32E103RET6,APM32F072C8U6,G32A1465,APM32F072V8T6

选型指南  -  极海半导体  - Jul-2024 PDF 英文 下载

【视频】极海APM32F407xG系列MCU培训

型号- APM32F405VGT6,APM32F091VCT6,APM32F051K6T6,APM32F091CCT6,APM32F003F6P6,APM32F051K8T6,APM32F103CCT6,APM32F405RGT6,APM32F003F6P7,APM32F103VET6,APM32E103VCT6,APM32F051C8T6,APM32F103RCT6,APM32E103ZET6,APM32F103RCT7,APM32F103VCT6,APM32F103ZET6,APM32E103RCT6,APM32E103VET6,APM32F415RGT6,APM32F407RGT6,APM32F030RCT6,APM32F091RCT6,APM32F003F6U7,APM32E103CET6,APM32F407RET6,APM32F407VGT6,APM32F415VGT6,APM32F407VET6,APM32F051K8U6,APM32F051C8U6,APM32F103TBU6,APM32F417VGT6,APM32F103RET6,APM32F051R8T6,APM32F417ZGT6,APM32F405ZGT6,APM32F051K6U6,APM32F030CCT6,APM32F030C8T6,APM32F103CBT6,APM32F103C8T6,APM32F030K6T6,APM32F030R8T6,APM32F103VBT6,APM32F103RBT6,APM32F407ZET6,APM32F407ZGT6,APM32F072VBT6,APM32F072RBT6,APM32F072RBT7,APM32F415ZGT6,APM32F407IET6,APM32F072CBT6,APM32F407IGT6,APM32F030K6U6,APM32E103RET6

商品及供应商介绍  -  极海半导体 PPTX 中文 下载

极海车规级MCU凭借可靠的产品品质,斩获“2023汽车芯片50强”与“MCU创新先锋”两项大奖

近日,极海车规级MCU凭借可靠的产品品质、专业周到的客户技术支持服务,以及量产级解决方案良好的市场表现,相继斩获“2023汽车芯片50强”、“MCU创新先锋奖”两项行业大奖。作为国内领先的32位车规级芯片设计企业,极海积极布局以服务汽车智能化、电动化、网联化的快速融合。

厂牌及品类    发布时间 : 2023-11-30

基于极海半导体APM32F411工业级高适配型MCU的移动电源控制板应用方案

随着技术的发展,消费者对移动电源产品品质和体验提出了更高要求,除了储电量、安全性、便携度等基本要求,更具美观、多功能、人性化等优势的产品才能赢得消费者的青睐。采用极海APM32F411RET6工业级高适配型MCU作为主控的移动电源控制板方案,满足性能、功能、体积等综合设计需求,可帮助客户打造更具性价比和市场竞争力的移动电源产品。

应用方案    发布时间 : 2024-08-14

【应用】极海工业级互联型APM32F107系列MCU用于单相并网储能变流器,工作主频96MHz

极海半导体工业级互联型APM32F107系列MCU,采用32位Arm®Cortex®-M3内核,工作主频96MHz;具备丰富的外设资源以及增强型存储空间:Flash高达256KB,SRAM高达64KB,满足单相并网储能变流器前后级控制的应用需求。

应用方案    发布时间 : 2023-03-02

【应用】国产极海半导体APM32系列工业级MCU助力推动新型工业化发展

工业级MCU应用场景范围十分广泛,并对使用寿命、温度、湿度、电磁辐射等有着严格的品质要求。极海半导体长期深耕中高端工控市场,本文就以绝对值编码器、高性能伺服驱动器及变频器方案为例,详细介绍极海半导体32位APM32位工业级MCU在工控领域的出色表现。

应用方案    发布时间 : 2022-11-02

极海联亮相2024全球MCU及嵌入式生态发展大会,展出新技术和产品并发表演讲

2024年7月25日,2024全球MCU及嵌入式生态发展大会在深圳君悦酒店举行,由AspenCore主办。极海作为特邀嘉宾在主论坛进行演讲,并展出新技术和产品,包括搭载Arm Cortex M52内核且采用Helium技术的G32R5系列实时控制MCU和针对电机市场的栅极驱动器与APM32M3514系列SoC等新品。

厂牌及品类    发布时间 : 2024-07-29

【应用】极海半导体APM32F035主控32位MCU用于医疗离心机,内置12位ADC及运放,支持霍尔补偿

目前医疗离心机用到的单片机也非常多,功能也越来越多集成化,大大降低产品设计的工作。本文推荐极海半导体APM32F035主控32位MCU,该芯片具有M0+内核最高72MHz工作频率,且内置12位的ADC,支持可编程转换分辨率、提高转换速率。

应用方案    发布时间 : 2023-05-30

【应用】极海32位MCU用于光伏逆变器,内置3个精度12位的ADC,主频高达168MHz

极海半导体APM32F407VGT6在硬件上标准LQFP100封装,高达168MHz的主频,独立FPU模块,高达82个I/O,操作简单,提供标准DEMO驱动程序等优点,是光伏逆变器应用或者其他通用MCU场景的优秀选择。

应用方案    发布时间 : 2022-12-23

APM32F411xCxE Arm® Cortex®-M4F core-based 32-bit MCU User Manual

型号- APM32,APM32F411XCXE SERIES,APM32F411XCXE

用户指南  -  极海半导体  - V 1.3  - 2024.1.24 PDF 英文 下载

展开更多

电子商城

查看更多

只看有货

品牌:极海半导体

品类:MCU

价格:¥1.6200

现货: 100

品牌:极海半导体

品类:32位微控制器

价格:

现货: 0

品牌:极海半导体

品类:MCU

价格:¥14.9850

现货: 60

品牌:极海半导体

品类:MCU

价格:¥14.8500

现货: 51

品牌:极海半导体

品类:MCU

价格:¥9.4500

现货: 50

品牌:极海半导体

品类:MCU

价格:¥9.7200

现货: 50

品牌:极海半导体

品类:MCU

价格:¥12.4200

现货: 50

品牌:极海半导体

品类:MCU

价格:¥15.7950

现货: 50

品牌:极海半导体

品类:MCU

价格:¥13.5000

现货: 50

品牌:极海半导体

品类:MCU

价格:¥14.1750

现货: 50

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

现货市场

查看更多

品牌:恒烁

品类:MCU

价格:¥1.0800

现货:154,600

品牌:RENESAS

品类:MCU

价格:¥15.6605

现货:140,156

品牌:ST

品类:单片机(MCU)

价格:¥14.2871

现货:114,259

品牌:MICROCHIP

品类:MCU

价格:¥6.6000

现货:100,000

品牌:RENESAS

品类:32-BIT GENERAL MCU

价格:¥7.3800

现货:76,715

品牌:RENESAS

品类:32-BIT GENERAL MCU

价格:¥15.3000

现货:75,000

品牌:MICROCHIP

品类:MCU

价格:¥9.0000

现货:64,841

品牌:Sonix

品类:MCU

价格:¥0.8500

现货:51,104

品牌:ST

品类:MCU

价格:¥6.5000

现货:51,000

品牌:MICROCHIP

品类:MCU

价格:¥5.7360

现货:50,000

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

服务

查看更多

TFT LCD液晶显示屏/模组定制

可定制显示屏的尺寸0.96”~15.6”,分辨率80*160~3840*2160,TN/IPS视角,支持RGB、MCU、SPI、MIPI、LVDS、HDMI接口,配套定制玻璃、背光、FPCA/PCBA。

最小起订量: 1000 提交需求>

MCU烧录/Flash烧录/CPLD烧录

可烧录IC封装SOP/MSOP/SSOP/TSOP/TSSOP/PLCC/QFP/QFN/MLP/MLF/BGA/CSP/SOT/DFN;IC包装Tray/Tube/Tape;IC厂商不限,交期1-3天。支持IC测试(FT/SLT),管装、托盘装、卷带装包装转换,IC打印标记加工。

最小起订量: 1pcs 提交需求>

世强和原厂的技术专家将在一个工作日内解答,帮助您快速完成研发及采购。
我要提问

954668/400-830-1766(工作日 9:00-18:00)

service@sekorm.com

研发客服
商务客服
服务热线

联系我们

954668/400-830-1766(工作日 9:00-18:00)

service@sekorm.com

投诉与建议

E-mail:claim@sekorm.com

商务合作

E-mail:contact@sekorm.com

收藏
收藏当前页面