HPM6000

一、概述

在操作相关flash器件的时候,需要先发指令再读数据,或者先发指令再发地址再发dummy再读相关数据。而先楫的SPI控制器中,SPI传输包括了命令、地址和数据字段,提供了专用的寄存器来存储这些字段,不需要开发者自行去填充。本文使用hpm6200evk开发板,flash器件是华邦的W25Q64JV。使用hpm_sdk进行开发。

SPI四线模式,统称也就QSPI。

本文是作者在使用先楫的SPI调试flash器件的心得,仅仅作为参考。

二、开发流程

(一)外设引脚初始化

需要初始化下SPI时钟,由于SDK使用的是单线常规模式的SPI,所以引脚上我们还需要初始化IO2和IO3两个引脚。

1.png

2.png

(二)SPI模式初始化

华邦的W25Q64JV使用的SPI模式是mode0或者mode3。这里使用mode0。可以使用sdk的api接口spi_format_init进行初始化

3.png

4.png

(三)SPI频率

先楫的SPI SCLK可以达到80M,这里由于是杜邦线接的flash模块,波形会存在失真,使用该flash可以达到50M的QSPI速度。

使用SDK的spi_master_timing_init api接口进行SPI频率调整。

(四)指令操作(单线模式SPI操作)

1. 华邦相关flash都会有手册,这里使用了SDK的spi_transfer api接口封装了一个指令操作的API。下面根据这个api配合flash器件的手册命令进行说明。

比如使用90命令读取制造商设备ID的时候,使用单线模式,需要先发指令,再发两个dummy,之后就是读取。

5.png

那么使用spi_transfer赋值以下结构体

6.png

cmd_enable:使能命令段传输

addr_enable:使能地址段传输

addr_pahase_fmt:选择是单线模式还是四线模式传输地址

trans_mode:选择的传输模式,比如同时读写,仅写,仅读,写读,读写,写填充读,读填充写等

dmmy_cnt:填充的数量

依靠上述说明,可以使用单线模式,传输模式为填充再读。填充数量为2

7.png

通过波形查看,是没什么问题的。    8.png

从以下可知,单线模式收发指令是没什么问题的。

9.png

(五)读写操作(四线模式QSPI操作)

这里举例读操作,读操作有好几条指令。这里举例使用Fast Read Quad I/O指令,也就是EBh指令。这里需要先发指令,再发地址(地址使用四线模式),再发三个填充dummy,之后再读。

10.png

11.png

擦除指令,可写入指令跟以上类似,这里测试sector0的0页地址。

12.png

对0页的256字节进行1到256赋值,然后再读取,这时候会是0~255 0变化。查看波形可以知道,读写正常。

13.png

三、总结

先楫的spi外设支持常规单线single spi,双线dual spi,四线quad spi。有着专用的操作flash的寄存器。极大方便开发相关flash器件。

以上内容来自先楫开发者的原创分享。

来源:先楫半导体HPMicro

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 143

概 述

在进行电机类、电源类应用开发时,如何使用PWM定时器模块灵活、高效的实现所需 PWM波形的输出,是众多开发者关注的问题。在上篇文章里,我们介绍了PWM定时器模块内的一些概念,以及如何生成普通PWM的过程。本篇内容将继续介绍互补PWM、同步 PWM、错相 PWM以及PWM如何使用ACMP封波等内容。

互补PWM

关于相同的代码部分,此处不再重复讲解,请参考《上篇》的普通PWM的讲解。

1.jpg

2.jpg

此处设置了 3 个比较器:cmp_config[0]与 cmp_config[1]用来生成中心对称 PWM,cmp_config[2]作为 PWM 影子寄存器的更新事件源,当 CNT 等于 cmp_config[2]时,影子寄存器写入寄存器内生效。

3.jpg

互补 PWM 对的配置,配置左死区宽度为 8000 个 half_clock,右死区宽度为 16000 个 half_clock。

4.jpg

设置 cmp_config[2]作为 PWM 影子寄存器的更新事件源,启动计数器。

5.jpg

通过修改 CMP0 与 CMP1 的值,每 100ms 更新一次互补 PWM 占空比。运行结果如下:

6.jpg

同步PWM

本节实验设计:使用 PWM0 的比较器比较事件去做 PWM1、PWM2、PWM3 的同步事件。故输出波形上看,PWM1、PWM2、PWM3 应完全同步,PWM0 与其则不同步。代码如下:

7.jpg

使能 4 个 PWM 定时器的 SYNCI 信号。

8.jpg

设置 STA 与 RLD。

9.jpg

cmp_config[0]与 cmp_config[1]用来做中心对称 PWM 所需的比较器。

10.jpg

cmp_config[2]用来做使 PWM 影子寄存器生效的比较器。

11.jpg

cmp_config[3]设置在 PWM0 CH8 上,用来产生比较事件,同步 PWM1、PWM2、PWM3。

12.jpg

互补 PWM 的死区设置与输出设置。

13.jpg

设置 PWM0 CH0 CH1 互补输出,同时设置 PWM1 CH8 使用 CMP3 产生比较事件。

14.jpg

设置 PWM1、PWM2、PWM3 互补输出。

15.jpg

启动计数器。

以下代码是对互联管理器的配置。配置 PWM0 CH8 的下降沿输出到TRGM0_OUTX0 上,同时 TRGM0_OUTX0 作为 TRGM1、TRGM2、TRGM3的输入,路由到 PWM1、PWM2、PWM3 的 SYNCI 信号上。

16.jpg

波形如下:

17.jpg

可见 PWM1、PWM2、PWM3 是完全同步的,PWM0 则与其有 20ns 的不同步。

错相 PWM

本节实验设计:使用 SYNT 实现 PWM0、PWM1、PWM2、PWM3 错相90°。代码如下:

18.jpg

19.jpg

20.jpg

21.jpg

22.jpg

以上代码请参考上文 “同步PWM” 章节的讲解,主要目的是生成 4 对互补PWM。

23.jpg

配置 TRGM,将 SYNT CH0 的比较事件路由到 PWM0 的 SYNCI 信号上,将 SYNT CH1 的比较事件路由到 PWM1 的 SYNCI 信号上,将 SYNT CH2 的21 / 24先楫半导体比较事件路由到 PWM2 的 SYNCI 信号上,将 SYNT CH3 的比较事件路由到PWM3 的 SYNCI 信号上。

24.jpg

配置 SYNT,分别设置 SYNT CH0 比较器比较值为 0,SYNT CH1 比较器比较值为 reload/4,SYNT CH2 比较器比较值为 reload/2,SYNT CH4 比较器比较值为 reload*3/4。

波形如下:

25.jpg

PWM+ACMP 封波

本节实验设计:使用两个片上 ACMP 对目标模拟电压进行监控,当电压超过 1.65V 时停止 PWM 输出。其基本思路为,将 ACMP 的输出信号通过互联管理器 TRGM 路由到 PWM 的内部 Fault 信号上,当 Fault 信号有效时 PWM波停止输出(故障保护功能)。

代码如下:

26.jpg

初始化 PWM 引脚,初始化 DAC 时钟与引脚(使用 DAC 输出模拟电压到ACMP 上模拟过压)。

27.jpg

输出互补 PWM 波。

28.jpg

设置 Fault 信号高电平有效;使能 FaultI0 与 FaultI1 有效(PWM 共 4 内2 外 fault 信号,哪些信号生效可选)。

29.jpg

设置 DAC 输出为直接模式,12bit DAC 输出范围 0~4095,4030 约为3.247V。该部分代码请直接参考 DAC 例程。

30.jpg

配置 ACMP,使能 ACMP2 与 ACMP3。

31.jpg

配置互联管理器,将 ACMP2 与 ACMP3 的输出信号路由到 PWM 的FaultI0 与 FaultI1 上去。

32.jpg

acmp_config 函数源码如下:

33.jpg

代码中将 ACMP 的正极输入选择为 IO 引脚,负极输入选择为 ACMP 内部专用 DAC,参考电压设置为 0x80,即 1.65V。

当 IO 引脚电压 3.247V 时(来自于外设 DAC 输出),ACMP 正极电压超过负极电压 1.65V,ACMP 输出有效,为高电平;经过互联管理器路由到PWM 的 Fault 信号上;由于 PWM 模块内配置了 Fault 信号为高电平有效,因此此时 Fault 信号有效,PWM 波形停止输出。

当 IO 引脚电压 0V 时(将引脚与 GND 短接),ACMP 正极电压未超过负极电压 1.65V,ACMP 输出无效,PWM 波形正常输出。

小 结

本文首先介绍了 PWM 定时器内各模块的基本概念与功能,而后对 PWM的使用由浅入深依次以代码实例进行讲解。可以看到,PWM 的使用只要配置好 STA、RLD、CMPx、影子寄存器等即可实现输出;如果有同步需求或与其它外设协同使用需求,则主要通过互联管理器 TRGM 的配置进行实现。

比较经典的例程还包括使用 PWM 触发 ADC 采样,先楫半导体 SDK 中已经有完整的实例与代码,各位开发者可以到官网下载研究,并欢迎大家多多交流。

来源:先楫半导体HPMicro

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 54

概 述

在进行电机类、电源类应用开发时,如何使用PWM定时器模块灵活、高效的实现所需 PWM波形的输出,是众多开发者关注的问题。先楫半导体已发布的HPM6000系列芯片上,均带有PWM定时器模块。与普通定时器产生的PWM相比,其产生的PWM可方便的配置为互补PWM对,并带有强制输出、死区插入、故障封锁、影子寄存器等功能。 

本文将简单介绍PWM定时器模块内的一些概念,以图文的形式帮助开发者理解PWM定时器模块的运行方式。然后辅以大量代码实例,介绍了如何生成普通 PWM、互补 PWM、同步 PWM、错相 PWM,以及PWM如何使用ACMP封波。帮助广大开发者更好地使用 PWM 定时器模块实现自己所需的功能。

PWM 模块

关于先楫半导体HPM6000系列 PWM 模块的详细功能,请参考先楫半导体官方网站发布的 UM 手册。

(官网 http://www.hpmicro.com/resources/resources.html

1、24+4 位向上计数器

一个 PWM 定时器模块内共有 3 个 24+4 位寄存器,分别为 STA、CNT、RLD。STA 与 RLD 为计数器计数的起点和终点;CNT 内保存着当前时刻的计数值。计数器从 STA 开始计数,达到 RLD 后重新从 STA 计数,一个又一个周期的循环往复,周期为 RLD-STA+1。

1.jpg

2.jpg

4 位拓展位,为开发者提供了更多样的计数信息:每当 CNT 计数到 RLD时,会产生 RLD 事件(可以生成中断或 DMA 请求);若 XRLD 不为 0,则每当 CNT 计数到 RLD 时,XCNT 加 1,当 XCNT 等于 XRLD 时,产生 XRLD 事件(可以生成中断或 DMA 请求)。

2、比较器

一个 PWM 定时器具有 16~24 个通道,以及 24 个比较器 CMPx(x=1~24)。比较器 CMPx 可以理解为 CNT 计数过程中的触发开关:每当CNT 等于 CMPx 时,该通道 PWM 输出会进行翻转。

开发者可以配置将哪些 CMPx 安装在目标通道上:配置方法为指定 x,再指定用于该通道比较器的数量 n,结果就是 CMPx、CMPx+1、... 、CMPx+n-1 比较器被应用于该通道。

假设我们对通道 1 进行配置,x=0,n=2,则如下图所示:

3.jpg

假设我们对通道 2 进行配置,x=2,n=4,则如下图所示:

4.jpg

3、影子寄存器

影子寄存器的作用是为 PWM 定时器的部分关键寄存器提供保护。在 CPU访问寄存器的时候,实质上改变的是它的影子寄存器,新值并不马上生效。只有在指定的时刻,才把影子寄存器的值更新到寄存器,防止即时生效的方式导致 PWM 输出波形异常,导致炸管子、短路等事故发生。

在芯片内,STA、RLD、CMPx、FRCMD 寄存器带有影子寄存器(这 4 类寄存器的更新会影响 PWM 的波形)。总体而言,HPM 芯片提供了 4 种方式将影子寄存器更新到控制寄存器内,分别为:

  • 软件将 SHCR [SHLK] 位置 1 时生效

  • 即时生效

  • 某个 CMPx 比较事件发生时生效

  • SHRLDSYNCI 上捕获到上升沿时生效

通常建议开发者配置影子寄存器为“某个 CMPx 比较事件发生时生效”,其它 3 种方式更新影子寄存器到寄存器内时,多多少少不能保证此时 PWM 输出的状态,可能会导致 PWM 波形异常。只有在开发者确定用其它 3 种更新方式不会导致硬件故障时,才推荐使用。下图展示了 CPU 以实时方式将影子寄存器更新到寄存器内可能产生的异常。

5.jpg

4、同步输入 SYNCI 与同步定时器 SYNT

同步输入 SYNCI 的作用是,当此信号有效时 CNT 的值被强制为 STA,SYNCI 无效后 CNT 开始正常计时。当需要多个 PWM 定时器的时基相同或错相时,操作PWM 定时器的 SYNCI 信号即可达到目标。

同步定时器 SYNT 是专门用来完成以上操作的计时器。SYNT 上有 4 个通道,每个通道有一个 CMP,发生 CMP 比较事件时,可通过互联管理器 TRGM将此事件路由到 SYNCI 信号上,从而实现了多个 PWM 的同步/错相。

6.jpg

5、互联管理器 TRGM

互联管理器是将片上众多外设相互关联使用的桥梁。例如可以用 PWM 比较事件触发 ADC 采样,使用模拟比较器 ACMP 比较结果对 PWM 封波,使用IO 输入触发 GPTMR 同步计时等等。其功能非常强大,且易用。下面以一张图绘出 TRGM 的基本模型。

7.jpg

简而言之,TRGM 的每个 output 通道都可以在众多的 INPUT 中选一个。例如可以将 SYNT 的比较事件做为 INPUT,输出到 PWM 的 SYNCI,这样就实现了 PWM 同步;例如可以将 IO 作为 INPUT,输出到 IO,这样就实现了IO 电平的转移输出。 

TRGM 可以实现外设硬件级别的同步与触发,可以实现各种外设互联配合使用,是极有用的一个功能模块。使用 TRGM 时,需要参考 UM 手册中TRGMx_INPUT_MUX 列表与 TRGMx_OUTPUT_MUX 列表,合理分配资源,选择需要的 INPUT 与 OUTPUT 信号。

8.jpg

9.jpg

普通PWM

由上述可知,一路普通PWM的输出需要配置好以下几点:

  1. PWM 输出控制:是否互补对、死区插入等

  2. RLD、STA

  3. CMPx

  4. 影子寄存器

函数如下,逐一进行分析:

10.jpg

首先停止 PWM 计时器的计数器,将 PWM 计数器清零,获取 SDK 提供的 PWM 输出默认配置。程序没有特别之处,属于配置前的初始化工作。

11.jpg

配置 PWM 允许输出,死区为 0,输出不反相;

12.jpg

设置 RLD 与 STA,分别为 reload 和 0;

13.jpg

配置 CMPx,模式为输出比较模式,比较值为 reload+1,影子寄存器更新方式为写入 shlk 位更新;此时由于计数器计数无法达到 CMPx,故输出波形恒为低电平。

14.jpg

配置通道 0 使用 CMP0,比较器数量为 1 个,因此 CMP0 的大小决定了pwm 的占空比,占空比为(RLD-CMP0)/RLD

15.jpg

启动计数器,更新 CMP0 的影子寄存器为 reload/4,最后将影子寄存器的值提交到寄存器内生效。运行结果如下:

本篇内容到此结束,下一篇我们会介绍了如何生成互补 PWM、同步 PWM、错相 PWM,以及PWM如何使用ACMP封波。敬请期待哈~

来源:先楫半导体HPMicro

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 102

在《玩转MCU双核(上)》文章里,我们给大家介绍了先楫HPM6000系列双核的特性、使用方法以及工程编译与调试。本文紧接上篇内容,给大家详细阐述双核的通信方式、资源分配以及双核应用eRPC架构。

1.png

双核的通信方式

HPM双核通信方式有那些?这里列举如下:

A. 通信外设通信

如enet/uart/spi/can/i2c/gpio等等。Core0和Core1可通过通信外设相互之间发送消息来通信。

( 注意:此方案会浪费对应的通讯外设,且需要硬件上支持。)

B. 共享内存RAM通信

Core0和Core1通过访问同一片内存RAM来达到通信。如:一个核写,另一个和读。

共享RAM要点

1. 双核下的共享RAM区域地址及大小必须相同。

2. 为防止CPU cache的影响,共享的RAM区域在双核下均要设置为nocache区域或者在访问前后强制刷新cache。

注意:如果设置为nocache区域,core0和core1中均要调用初始化PMP。

例如:

HPM-SDK双核例程下,双核linker文件中,均已分配了SHARE_RAM区域。

Core0 linker文件中的SHARE_RAM区域分配:

2.png

Core1 linker文件中的SHARE_RAM区域分配:

3.png

工程中定义共享RAM区域,并访问读写。

  • Core0工程下设定nocache区域,并初始化PMP。

  • Core1工程下同样设定为nocache区域,并初始化PMP。

如下:

Core0工程

4.png

Core1工程

5.png

通过debug调试,在core1中打断点,core1中写共享区域。

通过串口发送数据,在core0中读取共享区域。

运行结果如下:

6.png

从运行结果看,core1中写入的共享区域的数据和core0中读取的共享区域的数据是一致的。

C. 通信信箱MBX通信

HPM支持独有的通信信箱MBX来进行处理器核间通信。主要特性如下:

● 支持 2 个寄存器访问接口

● 每个接口支持 TX FIFO 和 RX FIFO

● 支持标志位反映 TX FIFO 和 RX FIFO 状态

● 支持生成中断

双核MBX通信,参考HPM-SDK例程drivers/mbx。

(注意:当然也支持读写Flash来通信,考虑到并发读写Flash带来的异常,此通信方案不推荐使用。)

在这里,推荐大家结合B和C方案,通过MBX做双核间的消息传递,通过共享RAM的方式来达到大数据的通信。

当然通过双核通信来实现双核间的同步和互斥。例如:通过MBX通信,实现类似OS互斥锁和信号量的功能。

双核的资源分配

HPM双核资源,除了以下资源是Core0和Core1各自私有的,其余资源均需要合理分配。

● CPU 自身的指令/数据本地存储器 ILM / DLM 为私有

● FGPIO 为私有

● 平台中断控制器 PLIC 为私有

● 软件中断控制器 PLICSW 为私有

● 机器定时器 MCHTMR 为私有

A:双核Flash 资源分配要点

防止Core0和Core1并发同时访问同一个flash。例如:结合MBX通信,实现互斥锁来避免并发访问。并且考虑到flash_xip(非xip的除外) 片上运行,同时应在访问flash前后,禁止和使能全局中断。

B:双核RAM 资源分配要点

1. 除了共享ram区域和各自私有的ILM/DLM区域。其余sram和sdram在core0和core1的分配中不可重叠,避免出现未知数据错误。

2. Core0和Core1共享RAM区域的分配,地址及大小必须相同。

C:双核访问同一外设要点

通常应该避免双核访问同一个外设。如果有需求要同时访问同一外设,需要注意以下几点:

1. 禁止双核均初始化同一外设。如:Core0已经初始化相关外设,Core1无需再次初始化。

2. 防止Core0和Core1并发操作同一外设。例如:结合MBX通信,实现双核互斥锁来防止并发操作。

D:双核使能同一外设中断要点

由于双核Core0/Core1各自的PLIC平台中断控制器是私有的,如果双核均使能了同一个外设中断,需注意以下几点:

1. 禁止双核均初始化同一外设。如:Core0已经初始化相关外设,Core1无需再次初始化。

2. 双核各自的私有PLIC中均要使能当前中断。如:Core0的PLIC中使能了IRQn_GPIO0_Z中断,Core1的PLIC中同样也要使能IRQn_GPIO0_Z中断。

3. 禁止双核外设中断处理接口中均清除中断标识位。如:Core0中清除了当前外设中断标识位,Core1中无需再次清除。如下:

7.png

8.png

E:双核异常要点

由于HPM双核是两个独立的CPU,是主从架构。

当双核出现异常情况,需要注意以下几点:

1. 其中一个核出现异常(crash)但未重启,另一个核仍能正常运行,不受影响。

2. Core0异常重启,Core1也会随之重启。

主从架构,Core0为主,Core1为从。当复位发生时,系统总是由Core0启动,而Core1处于待机状态,需要Core0装载启动Core1。

3. Core1异常重启,Core0仍正常运行,不受影响。

推荐结合看门狗WDG来合理处理双核异常情况。

双核应用eRPC架构

eRPC(Embeded Remote Procedure Call) 是一个简单的、易用的、高效的远程调用框架。

RPC是一种机制,Client端通过简单的本地函数调用,就能使用Server端提供的服务。对于Client端而言,使用远程服务就像调用应用程序中内置的库函数一样。

当Client端调用远程函数时,该函数的标识(identifier)和函数的参数(parameters)将被序列化到字节流中,此字节流通过传输层的通信通道(IPC、TCP/IP、UART、SPI等)传至Server端。Server端收到字节流数据后,解析函数参数并根据标识选择调用的服务函数。若函数有返回值,则Server端将返回值序列化并发送回Client端。

以下是RPC架构框图(此图仅显示一个传输方向,省略了来自Server端的回复)。

9.png

对应多核(MultiCore)应用,通过RPMsg-Lite是作为传输层;对于多芯片(MultiProcessor)应用,通过UART、SPI、TCP/IP等作为传输层信号通道。

HPM6000系列双核应用,将使用RPmsg-Lite作为传输层。

RPMsg-Lite(Remote Processor Messaging Lite)是ePRC的传输层,RPMsg协议定义了一个标准化的二进制接口,用于在多核系统中内核之间的通信。

RPMsg协议的分层模型如下:

10.png

它是实现eRPC的关键部分,采用的数据通讯方式为共享内存和消息通知。

详细介绍参考GitHub官方网站:

https://github.com/EmbeddedRPC/erpc

https://github.com/nxp-mcuxpresso/rpmsg-lite

HPM-SDK已完成了eRPC的移植,采用RPmsg-Lite作为数据传输层,采用MBX作为事件通知。

例程:hpm_sdk\samples\multicore\erpc

来源:先楫半导体HPMicro

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 245

多核的微控制器(MCU)向来是设计上的一大挑战,尤其是多核异构的设计。而MCU双核作为其中的精简版本,凭借其超强的处理性能和便捷开发的特性,很快受到业界的好评。先楫半导体先后推出了几款高性能MCU双核产品,集成 2 个 RISC-V 处理器,其中HPM6700系列两个核的最高主频都可以达到816MHz。本文通过对先楫HPM6000系列双核的使用方法、工程编译与调试、双核通信方式和资源分配等内容的介绍,全方位给大家介绍双核的使用和操作,让大家轻松玩转双核,完成更多的片上系统功能开发。

1.jpg

接下来,让我们看一看HPM6000系列双核MCU是如何玩转起来的吧~

双核简介

HPM6000系列的双核配置,均集成 2 个 RISC-V 处理器,双核采用主从结构。CPU0 和 CPU1 采用相同配置,如下:

● 支持相同指令集

● 相同容量的 L1 指令和数据缓存

– 32KB L1 I-Cache,4-way,128x 64B cache line per way

– 32KB L1 D-cache,4-way,128x 64B cache line per way

● 相同容量的指令和数据本地存储器:256 KB ILM 和 256 KB DLM

CPU0 和 CPU1 采用相同的存储器映射,以下为例外:

●    CPU 自身的指令/数据本地存储器 ILM / DLM 为私有;

●    FGPIO 为私有

●    平台中断控制器 PLIC 为私有

●    软件中断控制器 PLICSW 为私有

●    机器定时器 MCHTMR 为私有

双核的三种使用方法推荐

不论是在RAM中运行,还是片上Flash运行,双核固件均是存储在Flash上。客户根据应用场景,选择在上电后将双核各自的镜像从Flash中装载到RAM中执行或者基于Flash片上执行。

根据应用场景,选择合适的运行方式,推荐以下几种:

方案一:Core0 加载到RAM运行,Core1加载到RAM运行

RAM区域可以是各自的ILM,也可以片上的SRAM,或者是SDRAM。当然,装载CODE的RAM区域各自都是独立的。此方案应用与双核固件均占用小,可完全装载到RAM中运行。

固件存储位置:Core0和Core1的固件均存放在Flash指定区域(Flash分区规划)。上电后,BootRom 从指定Flash区域装载Core0镜像到指定RAM运行(type:debug/release),Core0运行后从指定Flash 区域装载Core1镜像到指定RAM,然后运行Core1。

方案二:Core0基于flash xip(flash片上执行)运行,Core1加载到RAM运行

此方案应用与Core0核固件占用大, Core1核固件占用小。通常将Core0用来做应用复杂交互,Core1用来做高实时性,高性能的触发逻辑。

固件存储位置:

1). Core0和Core1的固件各自存放在Flash的指定区域(Flash分区规划)。

  • 优点:Core0和Core1可单独OTA。

  • 缺点:需要维护两个固件BIN文件,并存放到各自的区域中。

2). Core1的固件以数组(只读区)镜像的方式存储在Core0的固件中,Core0固件存放在Flash指定区域;官方例程中使用此方案。

  • 优点:     只维护一个固件。

  • 缺点:Core0和Core1不可单独OTA。

方案三:Core0基于flash xip0(flash片上执行)运行,Core1基于flash xip1(flash 片上执行)运行

此方案应用与Core0核和Core1核固件均很大,双核均无法满足放到RAM中运行。

注意:由于双核均基于flash片上执行,如果使用同一个flash XPI,会出现并发访问Flash的情况导致未知异常发生;如果强制顺序访问,访问效率极低,严重拖垮CPU运行速率;故不建议两个核使用同一个flash XPI片上执行。建议使用XPI0和XPI1各自外挂一个FLASH,分别用于Core0 Flash xip0和Core1 Flash xip1。

固件存储位置:Core0和Core1的固件存储在各自外挂的Flash的指定区域中。

双核工程编译与调试

HPM双核是集成了两个RISC-V 处理器,是两个完全独立的CPU,故HPM双核工程是Core0工程和Core1工程两个独立的工程。因此HPM双核工程编译,其实是两个独立的单核工程的编译。用户只需要建立core0和core1的各自工程编译调试即可。

由于HPM-SDK例程中使用的是方案二,且Core1的固件以数组(只读区)镜像的方式存储在Core0的固件中,导致Core1工程为Core0工程的关联工程。因此在构建工程时,必须先构建生成Core0工程,作为关联工程Core1工程会自动生成。由于Core1的固件是Core0工程中的只读数组,故必须先编译Core1工程生成只读数组镜像后,再编译Core0工程。

如下构建编译调试双核hello world工程:

A. 构建工程

先构建生成Core0工程:

由于Core0是flash片上执行,故type选择:flash_sdram_xip或flash_xip

2.png

作为关联工程Core1工程会自动生成:

3.png

B. 编译工程

打开各自的工程(Core0通过GUI工具直接点击Open Project with IDE, Core1对应目录下双击打开工程)。

4.png

5.png

用SES编译各自的工程即可。

6.png

7.png

C. 工程调试

一、双核同时调试

基于OpenOCD调试 (FT2232/DAP-LINK等)。

为了达到Core0和Core1同时调试,基于OpenOCD调试在HPM-SDK例程中,对Core1的Debug做了如下限制:

1)Core1不启动GDB Server,连接Core0启动的GDB Server。当然使用不同的port来区分是Core0(Port:3333)还是Core1(Port:3334)。

2)Reset 和 Stop时,直接hart停止运行。

如下图:

8.png

因此,调试HPM-SDK双核例程,步骤如下:

步骤1:Core0的工程调试,和正常的单核调试相同,正常SES启动debug即可。

9.png

步骤2:Core1的工程调试,由于上述限制(为了双核同时调试),必须先将Core0的工程Debug运行,然后在启动Core1的Debug仿真。

10.png

可在Core0 SES终端看到Core1 GDB connect信息:

11.png

基于Jlink 调试

基于Jlink调试,对Core0和Core1的Debug做如下修改:

1. Core0 修改Debug连接target为:J-Link

2. Core1修改Debug连接target为:J-Link

12.png

3. Core1修改Debug Device为:HPM6750xVMx_CPU1

13.png

4. 由于SES修改Device为CPU1(上一步骤修改),联动修改ISA为:rv32i,导致编译等异常。故在Code Generation下改回ISA为:rv32imac。

14.png

5. 通常初始化时钟等外设在Core0中完成,故为了双核能同时调试,需先运行Core0 Debug至完成时钟等外设初始化后,方可Core1 Debug运行。

15.png

二、双核单独调试

基于 OpenOCD 调试

如果只用来单独调试Core1(Core0的单独调试不做任何修改即可),可修改Core1的Debug配置,如下:

Auto Start GDB Server: Yes

Reset and Stop Command: reset halt

16.png

修改后, 可直接启动Core1 Debug运行。

注意:由于CPU0,CPU1主从架构,通常外设等时钟初始化会在Core0中完成。如果是单独调试Core1,为了确保程序能正常运行,需在Core1工程中初始化时钟等外设。如下:

17.png

基于 Jlink 调试

单独调试Core1 (Core0的单独调试不做任何修改即可),JLink修改同双核JLink修改一致(可参考上方介绍的内容)。

同样为了确保Core1能正常运行,需在Core1工程中初始化时钟等外设。

18.png


下一篇,我们将会给各位小伙伴们介绍双核的通信方式、资源分配和双核应用eRPC架构,敬请期待。

来源:先楫半导体HPMicro

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 158


1679535093704746.jpg

概 述

作为高性能、低功耗的嵌入式MCU产品,先楫半导体的HPM6000 系列产品广泛应用于多个领域。在嵌入式系统的开发中,Bootloader 常常是开发者可能会遇到的第一个技术难点。应用程序运行环境能否正确构建,内核能否启动成功,都取决于Bootloader 能否正确工作。一个功能完善的嵌入式系统,还需要Bootloader 能够实现系统OTA更新升级的能力,即除了usb烧录、串口烧录等方式外,还预留给客户通过以太网等方式实现快捷固件升级的窗口。

本文以HPM6450为例,基于HPM6000 系列产品嵌入式系统的硬件平台和RT—thread 软件平台,描述系统引导程序Bootloader 的设计思路,阐述了设计时需要考量的因素和遇到的技术难点及操作,希望能给大家一些启发。

二级boot方案思路分析

2.png

(图1:整体思路分析)

如上图所示,整个方案涉及3个部分:

  1. FLASH空间的分区

  2. 二级boot

  3. APP固件

因本次我们讨论的重点是“二级boot”,所以下文内容仅涉及前两部分。

1、FLASH空间的分区

HPM6700/6400系列的单片机和我们常用的stm32、at32这类的单片机最大的不同是该系列MCU 是通过 xpi 总线外挂外部FLASH,即代码存储在外部FLASH。

查阅芯片用户手册可知,该系列MCU支持通过 XPI0 或XPI1外挂FLASH(FLASH外挂方式,如图2所示)。

其中xpi0映射的地址空间是0x80000000,xpi1映射的地址空间是 0x90000000, CPU可对这两块地址空间直接寻址并运行代码(如图3所示)。

3.png

(图2:外部FLASH挂载于xpi0原理图)

4.png

(图3:地址空间映射关系)

为实现固件升级,FLASH空间需要进行合理的划分,如Bootloader分区、用户程序分区、OTA升级分区、用户数据分区等。在RT-Thread上,FAL组件提供了方便的分区划分机制。 

本文分享的两种方案均以W25Q256为例,该FLASH大小为32MB,挂载于XPI0外设上,首地址为0x80000000,通过FAL组件对FLASH的分区详情如下图所示:

5.png

(图4:Flash 分区表)

注意,其中:

  • boot分区表示二级boot,该分区预留了1MB的存储空间,为未来的功能升级留足了空间。

  • app 分区可根据实际需要来分配大小,本方案中预留了1MB的空间。

  • download分区用于下载固件,在APP执行过程中,新固件通过OTA下载于该分区,并在重启后由boot分区的bootloader完成合法性检验和新固件升级操作。

  • Filesystem 分区用于实现文件系统,在此分区上面可以挂载littelfs格式文件系统,可以避免因频繁掉电导致数据丢失的问题。

  • Easyflash 分区可用于存储一些简单的参数等。

2、二级boot

二级boot由芯片BootROM引导,从芯片的用户手册可知:HPM6700系列支持多种启动方式,可到先楫半导体官网上查看“HPM6700/6400用户手册”的19.1内容部分,如下:

6.jpg

(图5:官方代码启动描述)

由上可知当从串行nor flash启动的时候,可支持“原地代码执行”和“拷贝到内部RAM”执行。“启动方式一” 表示代码存储在外部flash,并由CPU直接在flash上执行代码;“启动方式二” 表示代码存在flash里面,然后通过BootROM复制代码到内存后再执行。

受BootROM支持的两类启动方式的启发,笔者经过分析以及与官方的技术支持讨论得出如下结论:

  • 采用FLASH原地执行的方式,系统可支持更大尺寸的应用程序,如支持GUI的应用。在cache的加持下,该方式可实现成本和执行速度的平衡。(需要注意的是:由于FLASH固有属性的限制(多数FLASH不支持RWW),在需要支持FLASH擦写的应用中,用户代码需要做一些防止产生RWW场景的保护。)

  • 采用拷贝到RAM中执行的方式,可实现如下优势:

✔ 用户代码以更高的性能执行(RAM的随机访问性能优于FLASH)

✔ 规避了FLASH不支持RWW的限制,由于代码执行于RAM,在需要FLASH擦写的应用中逻辑会更简单。

考虑到HPM6700/HPM6400系列有高达2MB连续空间的RAM,若用户代码及代码所需要的RAM所占用的空间总和小于或等于2MB,“启动方式二” 是一种值得考虑的选择。

由于二级boot 同时支持以上两种启动方案,接下来,我们将针对每种方案分别进行讨论。

方案一:FLASH原地执行

在该方案下,app 在FLASH里执行。如上所述,app 存储于FLASH 1MB偏移处,需要将链接脚本中的FLASH首地址改为0x80100000。

需要注意的是,由于app是被二级 Bootloader 引导,因此应用程序中不应再携带用于 BootROM 引导识别的启动头(boot header)。

Boot 的 FLASH 脚本不改,最终跳转逻辑为:

Boot启动

  • 检查download分区是否有新固件,如果有则拷贝到APP

  • 关闭中断

  • 跳转到0x80100000地址,就启动了APP。

这样就完成了二级boot的设计。

这里最关键的就是如何修改连接脚本。

7.png

(图6:启动地址修改)

修改好app的链接脚本后,需要在boot里面进行跳转,跳转代码参考如下:

8.png

(图7:Boot 里跳转)

其中app_addr 为跳转偏移地址,如下:

9.png

(图8:偏移地址计算)

二级boot完成App跳转后,App在FLASH中原地执行。该方案的优势是与复制到RAM相比,应用的尺寸可以大至数十MB。考虑到FLASH的固有限制(随机访问性能稍弱,不支持RWW等),当应用程序执行于FLASH上, 开发者需要注意以下几点: 

对于需要高频执行的、对性能有要求的代码,用户程序需要将其复制到RAM中执行,否则会影响程序的效率(若cache未命中)。

若需要执行FLASH擦写操作,需要保证在FLASH擦写期间,没有程序或者其他外设访问FLASH(具体的实现方式有:关全局中断、关调度器等)。

完成FLASH擦写操作后,用户代码需要保证cache 一致性,否则可能会导致未预期的后果(如读到错误代码/数据)。

方案二:内存执行

若用户代码加代码所需的RAM总和小于2M,基于HPM6700/HPM6400有高达2MB的连续RAM,为规避FLASH固有限制带来的不便,产品可采用方案二,即:App本身在RAM中执行。启动过程中,二级boot将App复制到RAM中并中转到APP的目标地址执行。

10.png

(图9:内存系统描述)

采用该方案时,需要注意以下三点:

  1. 二级boot所使用的RAM不应和用户App所在RAM区域重叠,否则在拷贝中会产生错误。

  2. 二级boot在跳转到用户App前需要恢复中断到默认状态(关闭中断)。

  3. boot采用flash link的编译方式,APP要采用ram link的编译方式,即APP是通过内存方式的链接脚本,因此APP编译后无法通过下载到flash的方式调试,必须使用USB或者其他的方式下载固件到0x80100000处。

11.png

(图10:工作示意图)

以下为boot里面的链接修改,供大家参考:

12.png

13.png

(图11:Boot链接脚本参考)

14.png


(图12:App ram link方式链接文件参考)

在方案二中,二级boot需要做的操作比flash boot的方式多了一个步骤,需要先将APP分区的代码拷贝至内存,然后再跳转至内存执行。

15.png

(图13:代码拷贝至内存)

16.png

(图14:代码跳转至内存执行)

注意跳转前,需要关闭各种中断。

17.png

(图15:运行效果示意图)

3、注意事项

选择链接脚本时,要注意看左侧的链接脚本是否正确,如下图所示:

18.png

(图16:链接脚本示意图)

如果链接脚本不能执行,请检查下图的设置。

19.png

(图17:勾选newlib-nano)

编译的时候,需要把nerlib-nano勾选上,否则当使用memcpy的时候,有可能会出现 “非法指令” 的错误。

4、资料分享

先楫半导体HPM6750系列技术资料分享

百度云网盘链接:

https://pan.baidu.com/s/1QSr7nkGgKCKeeTpED7I_RQ 

提取码:13kr

阿里云网盘链接:

https://www.aliyundrive.com/s/aXgJujYknB5

提取码:90ok

20.png

5、文章参考

21.png

(源文链接——https://gitee.com/spunky_973/rt-fota

大家注意上文提到的这几点操作,相信会减少在添加Bootloader过程当中遇到的不少问题。

如果大家在开发过程中还有其他的思路或建议,欢迎到官方网站的 “先楫社区”

http://www.hpmicro.com/support/forumpark.html)发贴讨论,MCU生态建设需要各位的积极参与,感谢您的信任与支持!

来源:先楫半导体HPMicro

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 262

在上海先楫提供的HPM系列MCU评估套件上,多数集成了基于FTDI的FT2232芯片的板载调试器,方便了开发人员直接调试并评估HPM6000系列产品。

当用户开始基于HPM6000系列产品进行原理图和PCB设计时,出于成本和简化设计考虑我们推荐在电路上保留JTAG接口并连接相关信号到HPM6000系列MCU的JTAG引脚。

本文介绍了CMSIS DAP调试器,并介绍了利用其进行HPM6000系列微控制器调试的相关配置方法。

CMSIS DAP配置指南

1 CMSIS DAP简介

CMSIS DAP是一款开源的调试器固件,它定义了一系列标准的协议,用以访问芯片的调试接口(Debug Access Port)。CMSIS DAP调试器通常以接口芯片的方式呈现,以USB电缆运行调试器的主机,以JTAG或者SWD接口连接芯片的开发板。

主机与开发板直接通过交换一系列通讯实现调试,通常主机发送命令(command)而开发板回复响应(response)。借助CMSIS DAP调试器支持的JTAG命令,开发人员可以利用标准的CMSIS DAP调试器,调试HPM6000系列RISC-V高性能微控制器。

HPM6000系列微控制器符合The RISC-V Debug Specification, Version 0.13 规范,支持 4 线 JTAG 接口,符合 IEEE Std 1149.1。Debug 调试系统包括 JTAG 接口转换模块(DTM)和调试模块(DM) 2 部分。DTM 通过标准 JTAG 接口对接外部调试器,可以把 JTAG 上收到的调试指令转换成对 DM 模块的读写访问。调试模块 DM 集成了调试功能,可以暂停或者恢复 CPU 的运行,产生复位,以及访问片上资源。

因此,用户可以利用CMSIS DAP调试HPM6000系列微控制器,需要利用CMSIS DAP的JTAG接口。目前暂不支持使用SWD接口进行调试。

由于CMSIS DAP调试器固件开源,无需特别安装驱动,易于使用,易用获得,支持芯片的种类繁多,因此受到广大开发人员的欢迎。有兴趣的读者可以在国内各大知名网商平台搜索“CMSIS DAP”,获取相关购买信息。

2 CMSIS DAP调试接口电路

使用CMSIS DAP调试器,需要将其JTAG信号与HPM6000系列微控制器的JTAG引脚相连,下面以HPM6750EVK的调试电路为例,需要连接如下信号:

· TDO与PY0/JTAG_TDO

· TDI与PY1/JTAG_TDI

· TCK与PY2/JTAG_TCK

· TMS与PY3/JTAG_TMS

· JRST与PY4/JTAG_TRST(可选)

· SRST与PZ1/RESETN(可选)

· CMSIS DAP GND和开发板GND

1.png

 JTAG引脚连接

在HPM6750EVK上,试用CMSIS DAP进行调试的话,需要把0欧电阻R39,R40,R41,R43,R44,R45断开,并安装0欧电阻R46,R47,R49,R51,R52,R53,或把它们短接。

2.png

 JTAG接口示意图

3 CMSIS DAP工程配置

本节以Segger Embedded Studio集成开发环境为例,介绍了利用CMSIS DAP调试器进行HPM6000系列MCU开发调试必要配置步骤。

以基于sdk env的generate_project命令生成的hello world例程为例,打开生成的Segger Embedded Studio项目,点击菜单project,并选择Options:

3.png

 选择Project->Options 

寻找Debug下的GDB Server,并点击GDB Server Command Line右侧的省略号标记,编辑GDB Server Command Line。

4.png

 选择GDB Server Command Line

寻找命令行中,定义的缺省ft2232调试器的部分。

5.png

 命令行中ft2232.cfg部分

将其修改为cmsis_dap.cfg。

6.png

 命令行替换为cmsis_dap.cfg

配置完成即可开始调试。

4 异常诊断

当用户使用CMSIS DAP调试遇到故障时,用户也可以利用sdk env自带的命令行工具,测试调试器的连接和开发板JTAG接口的连接。

以Windows10操作系统为例,用户可以点击sdk env目录下的start_cmd.cmd,启动命令行工具:

7.png

sdk_env的命令行工具

使用cd命令进入调试器的目录hpm_sdk\boards\openocd

8.png

 进入hpm_sdk的openocd文件夹

以HPM6750微控制器为例,执行以下脚本:

openocd.exe -f probes\cmsis_dap.cfg -f soc\hpm6750-dual-core.cfg

注意,HPM6000系列其他型号产品,需要替换-f soc\hpm6750-dual-core.cfg为其他型号对应的脚本文件。

此时,正确的连接信息应如下:

9.png

 OPENOCD通过CMSIS DAP成功连接调试目标

当连接的CMSIS DAP调试器异常或者系统未检测到调试器时,可能出现以下连接信息

10.png

 OPENOCD未连接到CMSIS DAP调试器

当CMSIS DAP调试器与目标板连接异常,如调试相关信号连接错误,或者目标板本身各类异常,如芯片工作异常,板子供电异常等情况时,可能出现以下信息。11.png

 OPENOCD未连接到CMSIS DAP调试器

此时建议用户着重检查HPM6000微控制器芯片的工作情况,以及调试电路的连接情况。 

由于CMSIS DAP是开源的调试器固件,CMSIS DAP调试器可以基于众多芯片方案实现,各个方案的性能可能有所差异,有下载或者调试响应缓慢现象。推荐用户选择支持高速USB的CMSIS DAP调试器。

本文由上海先楫半导体高级工程师费振东费教授测试并编写。

来源:先楫芯上人

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 340

本文将为大家展示国产芯片HPM6000系列ADC性能出色的测试结果并为您提供了与HPM6000系列微控制器的模数转换器ADC相关的外部电路设计建议。

在HPM6700/6400系列微控制器上,提供了3个12位ADC和1个16位ADC。在HPM6300系列微控制器上,提供了3个16位ADC。在使用到AD转换的应用中,ADC的精度会影响到整个应用系统的性能。ADC的精度并不仅仅取决于模数转换器本身,也与微控制器的外部电路设计有关。


ADC外部电路设计

HPM6000系列高性能MCU的模数转换器ADC的供电和参考相关引脚总结如下:

1.png


表1. ADC的供电和参考引脚

本章节主要提供了ADC的供电和参考引脚的硬件设计建议。

1. ADC的供电

VANA为ADC的模拟供电引脚,VANA上的噪声有可能影响到ADC的精度。因此建议用户设计电路时,对HPM6000系列微控制器的VANA引脚谨慎处理。如条件允许,应采用单独的线性稳压器对VANA供电。推荐用户选择3.3V输出、供电电流大于50mA的LDO。


2.png

图1. VANA供电首选方案

如上图所示,HPM6000系列高性能微控制器支持单3.3V供电,可以对所有供电引脚提供统一的3.3V,对以下电源供电引脚:

  •  DCDC_IN,片上DCDC的供电引脚,片内DCDC提供1.1V的核心电压输出

  •  VPMC,电源管理域的外设供电引脚

  •  VIO_Bxx,各个IO Bank的供电引脚

这些供电引脚提供了微控制器整体功耗的主要部分,因此推荐用户使用效率更高的DCDC开关电源为之供电,对于不同系列产品,电源设计输出电流应有不小于1A的输出能力。


VANA的供电建议与其他电源引脚供电分开,以降低开关电源的噪声对模拟电路的影响,建议使用输出纹波更小的线性稳压器LDO对VANA供电,并在尽可能靠近VANA引脚的位置,并联1个4.7uF和1个0.1uF的电容用于滤波,注意电容应连接到模拟地。 

用户如果出于种种因素,没有条件实现使用单独的线性稳压器对VANA供电,可以参考下图的次选方案:

3.png

图2. VANA供电次选方案

VANA应当通过0欧姆的电阻或磁珠单点连接到微控制器的3.3V供电电源,并在尽可能靠近VANA引脚的位置,并联1个4.7uF和1个0.1uF的电容到模拟地用于滤波。VANA供电的次选方案对电源噪声相比推荐方案稍敏感,但是用到的电源器件较为节省,如果用户对ADC的性能要求不严格,可以采用次选供电方案。

2. ADC的参考

VREFH是模数转换器ADC的高位参考电压输入。VREFH的稳定直接影响到ADC的转换精度和抗噪声特性。建议用户采用独立的基准电压模块,提供VREFH,如下图所示:

4.png

 图3. VREFH首选方案

建议用户使用外部的基准电压模块提供VREFH,并在尽可能靠近VREFH引脚的位置,并联1个4.7uF和1个0.1uF的电容到模拟地用于滤波。

注意,VREFH的电压不要超过VANA的供电电压。

VREFL是ADC的低位参考电压,建议直接连接到模拟地,模拟地应当通过0欧姆的电阻单点与数字地连接。

如果出于成本考虑,不使用外部基准电压模块,用户可以参考以下VREFH次选方案:

5.png

图4. VREFH次选方案

VREFH应当通过0欧姆的电阻或磁珠单点连接到微控制器的VANA,并在尽可能靠近VREFH引脚的位置,并联1个4.7uF和1个0.1uF的电容到模拟地用于滤波。

VREFL是ADC的低位参考电压,建议直接连接到模拟地,模拟地应当通过0欧姆的电阻单点与数字地连接。

3.ADC的模拟信号输入

ADC的模拟信号输入线路上引入的噪声会对ADC的转换精度造成影响,用户可以采取以下措施,尽可能消除输入信号的噪音:

  • 尽可能减短输入信号线路的长度。

  • 避免在模拟信号线平行布置数字信号线路。

  • 如果条件允许,可以在模拟信号线两侧布置地线用作屏蔽。

  • 考虑在靠近ADC输入引脚的位置添加外部RC滤波器,注意RC滤波器的截止频率应  高于应用关心的ADC模拟输入信号的频率。

6.png

 图5. 模拟信号输入推荐

总   结

本文提供了HPM6000系列微控制器模数转换器ADC相关的硬件设计指南,ADC的参考电压和模拟供电质量直接关系到ADC的转换精度。建议用户根据应用的ADC转换精度要求,在以下几种参考方案中,选择合适的。

7.png

图6. ADC供电和参考连接方案总结

如上图所示,建议用户使用独立的线性稳压器产生VANA供电,独立的外部基准电压生成VREFH参考,以此获得最优的ADC转换精度。也可以考虑使用独立线性稳压器产生VANA和VREFH。性能最优的参考方案(前者),相比性能次优的参考方案(后者),ADC转换结果噪声降低可达约5%~10%。

对于ADC转换精度要求不严格的用户,可以使用开关电源DCDC产生MCU的全部供电。这个成本最优的参考方案,相比性能最优和性能次优的方案,ADC转换结果噪声增加可达20%~50%。

注意,ADC的转换精度受多种因素影响,各推荐方案及其效果仅供参考,建议用户根据自身应用对ADC的要求,选择合适的方案。

8.png

上图是HPM6750微控制器采用16位ADC(ADC3)以1MSPS采样率,对1.8V输入进行2万多次转换的转换结果。VREFH由外部基准电压提供,可以看到,转换结果的跳动幅度为+/-35LSB(~1.5mV)。所有转换结果的标准差为~5.58LSB。

9.png

上图是HPM6750的16位ADC(ADC3),采用标准测试方法,测试差分非线性(DNL)和积分非线性(INL)的测试结果。结果显示其16位ADC的DNL为-0.9/+1 LSB,INL为-5.2/+3.1 LSB。有兴趣的读者可以访问先楫半导体官方网站(www.hpmicro.com)查阅HPM6700/6400系列微控制器数据手册,获取完整的ADC电气特性参数。

以上为本期内容,如果您有想了解关于 HPM6000系列的其他内容,欢迎私信小编,后期会推出更多相关内容哦!

来源:先楫芯上人

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 220

本demo视频是由先楫半导体FAE 熊工为大家介绍是基于矢量控制的伺服电机驱动案例,采用ABZ测速方式,电流环执行频率20KHz,速度环10KHz,电流环执行时间1us,这个能够帮助用户提升电流环带宽,显著提高产品性能。

来源:先楫半导体HPMicro

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 33

页面

订阅 RSS - HPM6000