MCU

MCU是Microcontroller Unit(微控制器单元)的缩写,它是一种集成了中央处理器(CPU)、存储器(ROM、RAM)、输入/输出端口(I/O)、定时器(Timer)、串行通信接口(UART、SPI、I2C等)和其他外围设备控制器的单个芯片。MCU通常用于嵌入式系统中,用于控制各种电子设备和系统。

由于其集成度高、体积小、功耗低以及成本相对较低等特点,MCU被广泛应用于各种嵌入式系统中,例如智能家居设备、医疗设备、汽车电子系统、工业自动化等。MCU的选择通常基于应用的需求,如处理性能、功耗、外设接口等因素。

IAR嵌入式开发解决方案现已全面支持云途半导体YTM32系列MCU,携手合作伙伴共同助力高端创新应用的开发。

1.jpg

中国,上海 – 2024年1月25日 – 嵌入式开发软件和服务的全球领导者IAR与知名国产汽车芯片公司江苏云途半导体有限公司(以下简称“云途半导体”)联合宣布,两家公司达成战略合作,最新发布的IAR Embedded Workbench for Arm 9.50版本已全面支持云途半导体车规级YTM32系列MCU,双方将共同助力中国汽车行业开发者的创新研发。

云途半导体是一家专注于高性能汽车控制器芯片的集成电路设计公司。通过建立完善的汽车集成电路设计和验证平台,并严格遵循AEC-Q100、ISO-26262功能安全和 ISO-21343 信息安全等开发流程体系和技术规范,云途迅速向市场推出了多款具有自主知识产权的32位车规级高性能控制器芯片。目前,云途半导体已经实现“通用MCU+专用SoC”的完整产品矩阵,已全面覆盖车身域、座舱域、底盘域、动力域及自动驾驶域五大域90%的应用,其中YTM32B1L和YTM32B1M两大通用MCU产品系列已经出货累计数百万颗,获得汽车项目定点300+个。

IAR Embedded Workbench for Arm不仅仅是IAR的旗舰产品,更是全球数百万开发者钟爱的嵌入式软件开发解决方案。这一强大工具套件以其卓越的代码优化功能脱颖而出,不仅最大程度释放所选MCU的性能潜力,还确保应用程序的高效能。除了提供灵活的代码和数据断点、运行时堆栈分析、调用堆栈可视化、代码覆盖率分析等多项强大调试功能,与IAR硬件仿真器I-jet搭配使用更可实现无限制的Flash断点。此外,该工具套件还完美融合了静态代码分析工具IAR C-STAT,支持MISRA、CWE和CERT编码标准,以及动态代码分析工具IAR C-RUN,可检测算术错误、数组访问越界等问题。这些功能有助于开发者在日常开发中及早发现潜在问题,提升代码质量。更令人振奋的是,IAR还提供通过TÜV SÜD认证的功能安全版本,符合ISO 26262等十项功能安全认证标准,助力开发者快速推进功能安全产品的开发和认证,为嵌入式系统的安全可靠性提供坚实支持。

云途半导体CEO耿晓祥表示:“我们很高兴与IAR达成合作。充分发挥云途YTM32系列的性能,需要IAR Embedded Workbench for Arm这样功能丰富的工具链,此次合作将为云途半导体产品开发提供极大支持,后续我们还会有更多新上市的芯片与IAR继续进行合作。”

IAR亚太区副总裁Kiyo Uemura表示:“云途半导体是国内车规MCU领先企业,我们很高兴能和云途半导达成合作,IAR Embedded Workbench for Arm将持续提供灵活且完整的解决方案,帮助客户充分挖掘云途系列MCU的潜能。IAR一向重视与生态伙伴的合作,我们期待与云途半导体携手共进,共同引领推动汽车行业的创新与未来发展。”

关于YTM32系列的更多信息,请访问https://ytmicro.com。关于IAR Embedded Workbench for Arm 的更多信息,请访问 www.iar.com/arm

来源:云途半导体YTMicro

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

围观 21

车载逆变器又称电源转换器,是将汽车的12V直流电转换为220V交流电,以便在车内可以为手机、笔记本电脑、游戏机、电动工具等多种电器提供快捷供电。随着汽车电子化程度的不断提高,车载逆变器的市场需求也在稳步增长。

爱普特车载逆变器方案前级由APT32F1023B控制推挽升压,后级基于APT32F1023B全桥逆变。输入电源11-15V、28.5A,可逆变输出为110V-120V 、60HZ、2.6A、300W。还自带2个5V、4.8A USB接口,为电子设备提供了极大的便利。该方案不仅具有高度的稳定性,还有极高的安全性能,能有效地避免电子设备被烧坏。

1.png

方案成品板

2.png

前级模块

3.png

后级模块

方案特性:

  • 具备充足的存储器,可进行程序代码和相关数据的存储。

  • 具有丰富的PWM资源,如EPT、GPT等模块,可控制输出波形,确保输出的交流电稳定可靠。同时采用温控方式控制散热风扇,有效降低设备运行温度。

  • EPT具有硬件紧急模式,EPT具有硬件紧急模式,可选择LVD触发信号源 ,实现PWM输出的保护联动,从而有效防止MOS管损坏,提升设备的安全性,实现PWM输出的保护联动,从而有效防止MOS管损坏,提升设备的安全性。

  • 内置多路ADC通道,采用12位模数逐次逼近电路,最大转换速度1MSPS,可用于精准测量电流、电压、温度等关键参数等。

  • 配备了多种通信接口:如UART、SPI、I2C等,方便远程监控或与其他设备进行高效通信。

方案框图:

4.png

5.png

该款车载逆变器方案采用的主控MCU是爱普特APT32F1023B,这是爱普特基于自研IP库及RISC核研发的全国产高可靠32位MCU,搭载增强型PWM、12位高精度ADC,具备宽电压、高信噪比、优异的EFT、CS、ESD性能、触摸检测等功能。

更多APT32F1023B的芯片特性:

  • 片载64K程序闪存,独立2Kbytes数据闪存

  • 内含4Kbytes SRAM,可用于堆栈,数据存储,代码存储

  • 工作温度:40 to 105°C

  • 工作电压范围:1.8 to 5.5V

  • 最高工作频率:24MHz

  • 中断控制器:支持动态配置的可嵌套中断 (NVIC)

  • 增强的时钟和功耗控制器(SYSCON)

  • 独立看门狗定时器(IWDT)

  • 1x16位增强型定时器/计数器(EPT),每个TIMER支持7路PWM输出功能,其中6路可配置为互补带死区

  • 1x16位通用定时器/计数器,支持2路PWM输出功能 (GPT)

  • 1x16位计数器(COUNTERA),支持自动重载功能以及单次或者循环计数功能(载波发生器)

  • 2x16位基本计时TIMER (Basic Timer)

  • 1x16位低功耗TIMER(LPT)

  • 1x16位RTC

  • 1x8位WWDT

  • 串行通信接口:1x I2C,3x UART,1/0 x SPI,1 x SIO

  • 多达16路的12位ADC,支持内部/外部VREF输入

  • 支持96bit UID功能

  • 最多支持22个GPIO,所有GPIO均可配置为外部中断

  • 支持三种工作模式:RUN,SLEEP,和DEEP-SLEEP模式

  • 多达17路的触摸按键控制器

  • 4 个大电流驱动管脚(每个管脚支持灌入最大电流为120mA)

APT32F1023B以其优异的性能及卓越的品质保证,获得了广大客户的认可,正广泛应用于工业控制,触控家电,消费电子设备等领域,并成为以上应用市场国产替代和创新产品的更优选择。

如需了解更多产品或方案详情,请联系爱普特微电子。

来源:爱普特微电子

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

围观 13

历经两年潜心研发,德普微电子正式发布三大系列MCU——DPM32M08X 旗舰系列、DPM32M05X 主流系列、DPM32M03X 超值系列,致力打造电机控制芯片可靠性新标杆。

1.jpg

产品搭载Arm® Cortex®-M0内核+自研DSP架构,FOC+SVPWM运算仅需1us,主频高达96MHz,内置128KB Flash,通过10KV HBM ESD接触放电测试,可定制封装,广泛应用于电动出行、智能家电、电动工具等需要电机驱动的场景。

2.jpg

产品 RoadMap

  • 产品优势M0+电机DSP双核,计算FOC+SVPWM只要1us

  • 10KV ESD HBM接触放电,打造可靠性新标杆

  • 可选2个完全独立的3M采样率ADC

  • 集成4路可编程运算放大器,4个模拟比较器,芯片外围极致精简

  • 多款集成预驱和LDO型号可选,BOM成本大幅减少

  • 自有封测工厂,年产能百亿颗保障品质

应用范围

  • 电动自行车、三轮车、平衡车、滑板车

  • 空调风机、压缩机,冰箱、洗衣机

  • 工业风机、水泵、角磨机

  • 电动工具、园林工具

  • 筋膜枪、按摩椅

  • 落地扇、吊扇、PC/服务器散热风扇

  • 高速吹风筒、吸尘器、扫地机器人

  • 工业变频器、伺服电机

  • BMS

技术支持

  • 电机驱动 Demo 板与参考设计

3.jpg

  • 丰富的电机算法库

4.jpg

  • 电机调试上位

机基于自研的上位机电机调试软件,方便用户搭建测试环境,调整参数以适配不同电机,便捷完成方案开发和测试工作。

5.png

来源:德普微电子

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

围观 32

Holtek针对TWS耳机充电盒推出HT45F2440高整合型Flash MCU。耐压24V与最大1A的线性充电管理可保护充电盒在异常USB-C电压连接时不损坏,于正常电压时缩短充电时间,内建5µA低功耗同步升压器可持续供电给耳机,延长TWS耳机使用时间。

1.jpg

HT45F2440具备4K×16 Flash ROM、256×8 RAM、128×8 EEPROM、多功能定时器、6个通道12-bit ADC、±1%参考电源、IC温度测量,满足锂电池充放电与芯片温度管理。丰富通信接口搭配内建电源路径管理可实现USB-C直充耳机来缩短充电所需时间,充电盒与TWS耳机的通信界面也支持UART或AM双模。

在封装方面,提供32-pin QFN(4mm×4mm)封装,有效缩小PCB面积,降低PCB布局与架构设计的开发难度。非常适合TWS耳机充电盒或是需要内建锂电池且需升压5V输出的产品。

来源:HOLTEK

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

围观 14

今天,四维图新旗下杰发科技正式对外宣布,截止2023年12月底,公司车规级芯片在全球出货量突破3亿颗,其中MCU出货量突破5000万颗,SoC芯片出货量超8000万套。这是杰发科技在快速发展过程中取得的一个重要里程碑,为公司迈向中国领先世界知名的汽车电子芯片公司进一步夯实基础,同时也是代表全球OEM和Tier 1对杰发科技汽车芯片产品的高度认可和肯定。

创芯十载,驱动未来

1.png

杰发科技自2013年成立以来,始终专注于汽车电子芯片及相关系统的研发与设计。在全新的汽车电子电气架构下,成功完成汽车应用处理器大算力芯片SoC、车规级微控制器MCU、车载功率放大器AMP和胎压监测专用传感器芯片TPMS四大产品线布局。作为四维图新旗下“智芯”业务主体,杰发科技不仅提供底层硬件支撑,还致力于赋能智慧出行,助力美好生活。   

经过十年的砥砺前行,杰发科技已与全球知名OEM和Tier 1取得合作,公司的车规级芯片已搭载到国内超95%的主机厂,包括传统燃油车、新势力造车、商用车等。值得一提的是,智能座舱芯片AC8015在2023年3月量产两年突破百万颗以后,凭借多样化的产品形态和高性价比,仅2023年一年时间,其出货量再次突破100万颗,足以证明行业对公司芯片的高度认可。在此背景下,多家主机厂主动与杰发科技在芯片产品长期战略规划层面开展合作,联合定义,共同开发。

在出货量突破3亿颗的背后,是公司强大而稳健的供应链管理体系。杰发科技与全球知名的晶圆厂商和封测厂商建立了牢固的合作伙伴关系,在原材料采购、生产调度、物流运输等方面建立了高效而灵活的供应链体系,确保顺畅运作,为产品的高质量和高产能提供可靠的支持,及时、准确地满足全球客户的需求。即使在缺芯潮期间,依然通过多种措施保产保供。为了加强供应链韧性和安全,杰发科技已联合多家本土晶圆厂商进行车规级产线的建设,已有部分芯片型号成功流片量产。

对技术创新和质量管控的极致追求,成为支撑杰发科技3亿颗出货量的关键。截止2023年底,杰发科技持有国内外车规级芯片注册专利达150余件,主要覆盖车载芯片电路设计、车载电子控制系统、通讯系统、图像处理等技术领域。对知识产权的保护意识助力杰发科技芯片成功出海,并且出货全球。

在公司成立十周年之际,迎来出货量突破3亿颗,这是杰发科技和行业不懈努力的成果。令人感到欣慰的是,中国汽车芯片厂商开始跻身全球汽车电子供应链体系,一改往日海外大厂垄断的局面。随着中国新能源汽车的不断崛起,杰发科技将继续发挥技术实力和市场优势,为全球汽车产业提供更加可靠先进的芯片,期待在2024年公司芯片出货量再创新高。   

来源:AutoChips

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

围观 26

经过前一期的芝识课堂,我们了解了东芝MCU产品所基于Arm® Cortex®-M3内核的基本结构和寄存器分配的细节。大家一定迫不及待地想知道Arm® Cortex®-M3内核的操作模式又有哪些技巧吧?今天芝子就带大家详细学习一下吧!

Arm® Cortex®-M3有两个特权(特权/非特权)和两种操作模式(线程/处理者)。对于嵌入式使用,可以选择只有特权级别的基本配置或在特权和非特权之间切换的配置。在特权/非特权级别下,通过在分配给寄存器R13的主栈指针(MSP)与进程栈指针(PSP)之间切换,堆栈区域可由操作系统内核以及用户例程等处理功能分离和管理。

如果发生异常/中断的程序,控制寄存器的状态以及堆栈指针的切换情况是怎么样的呢?如图1所示,当发生异常/中断时,使用中的堆栈会随控制寄存器CONTROL的状态而改变。以显示主栈指针(MSP)和进程栈指针(PSP)之间的切换状态。

1.gif

图1 发生异常/中断的程序时控制寄存器的状态以及堆栈指针的切换

Arm® Cortex®-M3内核的所有异常都在特权模式下运行,且具有中断特权并支持嵌套中断,所有异常都集成在NVIC寄存器中。值得注意的是,因每个设备而异,部分设备中断过程支持外部中断。异常可通过复位、中断、故障和系统调用执行。异常类型和特权级别如图2所示。

2.gif

图2 异常类型和特权级别

对于集成异常的NVIC控制寄存器,当发生异常和中断操作时,它作为从主内核到存储器的设备被访问,用于控制各中断使能的设置与清除、控制各中断请求的设置与清除(释放保留)以及控制中断的优先级。

下面我们再带大家了解NVIC块的基本功能之一——外部中断处理控制,将使能位和挂起位分配给每个外部中断信号,并配置控制寄存器。控制寄存器分为仅设置寄存器和仅清除寄存器。外部中断的产生通过优先级寄存器的信息来控制。该寄存器用于设置中断优先级以及使能位和挂起位的状态,如图3。Arm® Cortex®-M3通过NVIC控制实现高速入栈/出栈处理,此外,如果中断处理过程中同时发生中断请求或发生高优先级的中断请求,则入栈/出栈处理的寄存器自动保存将被忽略,从而改善处理时间。

3.gif

图3

介绍完异常和中断操作,我们再来看看Arm® Cortex®-M3规格的存储器映射。图4是Arm® Cortex®-M3规格的存储器映射示意图,可以清楚看到每个存储器对应的存储功能。图5则展示了这款MCU的存储器映射细节,从中可以看到相比于Arm® Cortex®-M3标准的规格,该芯片的部分存储器映射进行了深度优化。

4.gif

图4

5.gif

图5

在CPU接收到外部中断/异常时,它会先查询向量表,以查找到相应的中断服务程序地址。向量表是指中断服务程序入口地址的偏移量与段基址,一个中断向量占据4字节空间。各种异常的处理者(处理例程)的起始地址是分别设置的。当异常或中断事件发生时,从地址开始获取异常处理者。各种异常的向量表如图6所示。

6.gif

图6

此外,关于位带和位带别名区的详细信息如图7所示。存储器中的数据通过1位单元进行有效运算。1位单元通过将位带区的数据加载或存储到位带别名区来访问这些数据。

那么位带区数据和位带别名区的地址如何分配?位带别名区的地址以字为单位进行分配(1个字=32位):位带别名区的字地址bit0访问位带区的每个位;位带别名区的字地址的分配方式为,每个地址分配给位带区的每个位。

7.gif

图7

今天的芝识课堂,我们深入探讨了Arm® Cortex®-M3内核的操作模式,并分析了存储器映射的具体细节。接下来我们会一起进入东芝MCU产品的外围电路部分,学习如何针对不同应用增加各种功能单元,从而助力低功耗高性能解决方案开发的,敬请期待!

相关内容:【TX03微控制器】—强大的Arm® Cortex®-M3内核(上)

来源:东芝半导体

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

围观 30

近日,曦华科技与Vector共同宣布,支持曦华蓝鲸CVM014x系列车规级MCU的Vector经典AUTOSAR评估软件包(MICROSAR Classic evaluation bundle)正式发布。该评估软件包基于蓝鲸MCU平台集成了BSW-MCAL的功能模块以及Microsar OS,并经过了严格的产品量级的测试验证,为客户提供高质量、高可靠性的AUTOSAR开发源码和工具,降低客户在前期评估阶段AUTOSAR相关的支出成本。这一合作成果将为汽车行业带来更加高效、安全的软件开发与整车集成应用,为双方共同推广汽车电子芯片软件支持和打造汽车电子软件生态系统具有重要意义。

Vector 的经典AUTOSAR 评估软件包(MICROSAR Classicevaluation bundle)主要包含基于经典AUTOSAR标准的BSW基础软件包,RTE,OS,MCAL integration package等。基于这一评估软件包,用户可以很容易的测试评估和使用AUTOSAR 基础软件功能体验整体AUTOSAR开发流程以及尝试Vector经典的 DaVinci 配置工具。

1.png

蓝鲸CVM014x Mcal 基于AutoSAR Classic Platform 4.2.2开发,完整支持微控制器驱动(Microcontroller Drivers), 存储器驱动(Memory Drivers),通信驱动(Communication Drviers),I/O驱动(I/O Drivers),并且提供部分常用CDD模块。

2.png

蓝鲸CVM014x系列车规级MCU芯片专为汽车电子嵌入式控制系统设计,具有高性能、高可靠性、功能强大的特点,目前已获得德国莱茵颁发的ISO26262 ASIL-D功能安全流程认证,以及国创中心颁发的ISO26262 ASIL-B功能安全产品认证,公司全系产品均通过AEC-Q100车规可靠性测试标准,并内嵌信息安全模块及加密引擎。

3.png

CVM014x系列采用先进车规工艺制程,基于ARM Cortex-M4F内核,外设资源及内存配置丰富,提供完整的集成开发环境工具链以及AUTOSAR MCAL开发支持,特别适用于汽车电子通用类控制,例如矩阵式前大灯,车身BCM,T-Box,智能座舱以及电机类应用等。

曦华科技十分重视汽车软件开发及数字科技的技术积累,已加入AUTOSAR联盟成为Development Partner会员。曦华科技与Vector双方都非常看重AUTOSAR生态系统,凭借双方各自所在领域多年的经验及技术积累,形成在芯片+软件的技术适配合作,加快汽车软件的开发和集成速度,为客户提供更好的汽车MCU产品硬件和软件生态系统的技术支持,构建更强大的汽车生态。

来源:深圳曦华科技

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

围观 18

新型可配置逻辑模块(CLB)提供量身定制的硬件解决方案,有助于消除对外部逻辑元件的需求

为了满足嵌入式应用日益增长的定制化需求,Microchip Technology Inc.(微芯科技公司)推出PIC16F13145系列单片机(MCU),提供量身定制的硬件解决方案。该系列MCU配备了全新的独立于内核的外设(CIP),即可配置逻辑块模块,可直接在MCU内创建基于硬件的定制组合逻辑功能。由于集成到MCUCLB使设计人员能够优化嵌入式控制系统的速度和响应时间,无需外部逻辑元件,从而降低了物料清单(BOM)成本和功耗。图形接口工具可帮助使用CLB综合定制逻辑设计,进一步简化了流程。PIC16F13145系列专为利用定制协议、任务排序或 I/O 控制来管理工业和汽车领域实时控制系统的应用而设计。

1.jpeg

Microchip负责8位单片机业务部的副总裁Greg Robinson 表示:“可配置逻辑单元 CLC)模块集成到 Microchip MCU 中已有十多年历史,新发布的CLB 模块是我们可定制逻辑产品发展的新阶段,使该系列MCU能够用于通常属于独立可编程逻辑器件领域的应用。当今市场上很少有单芯片解决方案能像PIC16F131系列MCU那样解决嵌入式工程师的设计难题。新型MCU可处理定制逻辑功能,最大限度地降低功耗,简化设计,并能适应不断变化的设计要求。”

CLB Block Diagram.png

CLB-Tool.png

由于CLB的运行不依赖于CPU的时钟速度,因此能改善系统的延迟,并提供低功耗解决方案。CLB可用于在CPU休眠模式下做出逻辑决策,从而进一步降低功耗和软件依赖性。PIC16F13145 MCU还包括一个具有内置计算功能的快速10位模数转换器(ADC)、一个8位数模转换器 DAC)、快速比较器、8位和16位定时器以及串行通信模块(I2CSPI),从而可以在没有CPU的情况下执行许多系统级任务。该系列将提供从8引脚到20引脚的各种封装。

开发工具

PIC16F13145 系列 MCU得到MPLAB® 代码配置器(MCC)支持 ,这是MPLAB X IDE中一个免费软件插件,提供了一个基于GUI的简便接口,用于配置器件和板载外设(包括 CLB)。该接口可为高级用户提供使用硬件描述语言(HDL)的选项,通过原理图设计所需的定制逻辑,从而缩短开发时间。新的合成器有两种选择:集成到MCC,以及在线方式logic.microchip.comPIC16F131 Curiosity Nano 评估工具包为使用 PIC16F131 系列进行设计提供全面支持,可协调实现无缝嵌入式开发体验,缩短产品上市时间。

供货与定价

PIC16F131 MCU每件售价0.47 美元,10,000件起售。如需了解更多信息或购买,请联系Microchip销售代表、全球授权分销商或访问 Microchip采购和客户服务网站www.microchipdirect.com

资源

可通过Flickr或联系编辑获取高分辨率图片(欢迎自由发布):

Microchip Technology Inc. 简介

Microchip Technology Inc.是致力于智能、互联和安全的嵌入式控制解决方案的领先供应商。其易于使用的开发工具和丰富的产品组合让客户能够创建最佳设计,从而在降低风险的同时减少系统总成本,缩短上市时间。Microchip的解决方案为工业、汽车、消费、航天和国防、通信以及计算市场中约125千家客户提供服务。Microchip总部位于美国亚利桑那州Chandler市,提供出色的技术支持、可靠的产品交付和卓越的质量。详情请访问公司网站www.microchip.com

围观 15

贾 工(先楫资深FAE工程师):12年产品研发经验,具有变频器、伺服等工业产品开发经验,也负责过激光投影显示系统开发、AI应用开发、PYQT、Linux驱动开发等工作。

概 述

高速缓存(Cache)主要是为了解决CPU运算速度与内存(Memory)读写速度不匹配的矛盾而存在, 是CPU与存储设备之间的临时存贮器,容量小,但是交换速度比内存快。内置高速缓存通常对CPU的性能提升具有较大作用。

CPU要读取一个数据时,首先从Cache中查找,如果找到就立即读取并送给CPU处理;如果没有找到,就用相对慢的速度从内存中读取并送给CPU处理,同时把这个数据所在的数据块调入Cache中,可以使得以后对整块数据的读取都从Cache中进行,不必再调用内存。

1.png

这样的读取机制使CPU读取Cache的命中率非常高(大多数CPU可达90%左右),也就是说CPU下一次要读取的数据90%都在Cache中,只有大约10%需要从内存读取。HPM CPU访问片上的Cache内数据是零等待的,这大大节省了CPU直接读取内存数据的时间,使CPU读取数据时基本无需等待。总的来说,CPU读取数据的顺序是先Cache后存储设备。

一、Cacheable Memory 相关概念 

在访问HPM片上ILM与DLM(Local Memory)时,芯片物理结构决定了CPU不会使用Cache去缓存Local Memory的数据。访问其它存储设备如flash、sram、sdram等,则Cache可以发挥其缓存机制来加快访问速度。在Cache生效的地址空间内,用户可以设置Memory的物理存储属性来设置是否对指定的地址空间使用Cache。

2.png

PMA(Physical Memory Attributes)是指一段存储地址空间的可读写、可执行、可缓存等属性。读、写、执行等属性容易理解,此处不赘述。下面介绍几个其它属性及相关的概念。(注意:HPM5300系列不支持PMA设置)

首先介绍一些Cache基本概念。

1. Cache Line/dirty/invalidate

Cache Line:一次最少缓存多少字节的数据是有要求的,通常以Cache Line为单位。HPM6000系列MCU Cache Line为64byte,HPM5300系列MCU Cache Line为32byte。在进行PMA设置时,要求起始地址按Cache Line字节数对齐,大小为Cache Line大小的整数倍。声明数组时最好也遵循此规则。

Dirty:表示某Cache Line的数据是否与Memory保持一致,如果只将数据写入Cache而没有写入Memory,会将该Cache Line标记为dirty。

Invalidate:将某地址范围的Cache Line数据失效掉,当Cache Line状态被Invalidate时,不管读取是否命中,CPU都会到Memory拿数据。

对Cache的标准操作包括 write-back,invalidate,flush。

Write-back表示把cache内dirty的数据写入Memory,invalidate表示忽略某地址范围的Cache line,flush操作则先对某Cache Line 进行write-back操作,再进行invalidate操作。HPM SDK的hpm_l1c_drv.h文件提供了这3种操作的接口函数。

2. Bufferable

Bufferable是指MCU在写入一片内存区时,是否可使用Write buffer进行加速。例如向sram内写入64个字节:

1)不使用Bufferable:CPU等待64字节数据写入完成后再去执行其它指令;

2)使用Bufferable:CPU将64字节数据写入Write buffer,不等Write buffer内的数据写入sram,CPU就去执行其它指令;写入动作则自动进行直至完成。

3. Cacheable

Cacheable与 non-Cacheable,决定了CPU是否启用缓存特性。如果启用Cacheable特性,则HPM芯片上的内存区域可以分区指定PMA,可选的属性选项如下(详细信息可参考先楫官方文档HPM6200 UM 2.8章节):

Write-Back

Write-Back(与Write-Through互斥)是指向存储设备内写数据命中时,CPU将数据写入Cache,并不立马向存储设备写入数据,如下图所示:数据先写入到Cache内(①),在Cache内标记该Cache Line为dirty,即表示该Cache Line内容与Memory内容不符;Cache内数据写入Memory(②),则在Cache Line被替换或手动执行write-back操作或flush操作时(把dirty的数据写入Memory)才执行。

未命中时,则写入Memory。是否写入Cache 由xxx-Allocate决定。

3.png

Write-Through

Write-Through(与Write-Back互斥)是指向存储设备内写数据时,无论命中与否,CPU都将数据写入Memory。

命中时,数据同时写入Cache 与Memory;

未命中时,数据写入Memory,是否写入Cache 由xxx-Allocate决定。

xxx-Allocate

xxx-Allocate则用于控制读/写未命中Cache时,是否要在Cache内申请Cache Line用于缓存读/写的数据。例如:

Read-Allocate代表读未命中时,CPU不只从Memory将数据读入,还将数据在Cache放了一份,那么下次再读的时候就不用去Memory读了;

Write-Allocate代表写未命中时,会在Cache内分配Cache Line储存写入的数据,那么下次读的时候就可以从Cache读了;具体是否写入Memory取决于使用的是Write-Back还是Write-Through。

Non-Allocate和 Read-and-Write-Allocate就不再进行解释了。

/* Init noncachable memory */    
extern uint32_t __noncacheable_start__[];    
extern uint32_t __noncacheable_end__[];    
start_addr = (uint32_t) __noncacheable_start__;    
end_addr = (uint32_t) __noncacheable_end__;    
length = end_addr - start_addr;    
if (length > 0) 
{       
    /* Ensure the address and the length are power of 2 aligned */        
    assert((length & (length - 1U)) == 0U);        
    assert((start_addr & (length - 1U)) == 0U);        
    pmp_entry[index].pmp_addr = PMP_NAPOT_ADDR(start_addr, length);        
    pmp_entry[index].pmp_cfg.val = PMP_CFG(READ_EN, WRITE_EN, EXECUTE_EN, ADDR_MATCH_NAPOT, REG_UNLOCK);        
    pmp_entry[index].pma_addr = PMA_NAPOT_ADDR(start_addr, length);        
    pmp_entry[index].pma_cfg.val = PMA_CFG(ADDR_MATCH_NAPOT, MEM_TYPE_MEM_NON_CACHE_BUF, AMO_EN);        
    index++;
}
pmp_config(&pmp_entry[0], index);

以上代码设置了__noncacheable_start__至__noncacheable_end__地址范围内的存储区域PMA属性为noncacheable,bufferable。

通过以上解释,相信开发者可以看懂UM手册内的相关描述了,以HPM6200系列为例,User Manual v2.0 2.8章节的内容对PMA有详细描述。

二、HPM L1-Cache相关函数 

HPM系列芯片L1-Cache分为 iCache与 dCache,指令缓存与数据缓存。开发者们经常遇到的问题是开启dCache导致的CPU拿到的数据与Memory内数据不一致(Cache内的数据与Memory不一致时,读取命中Cache会发生这样的结果)。因此,此处主要介绍 dCache相关函数。

打开hpm_l1c_drv.h文件即可看到先楫提供的Cache相关的函数,部分如下:

*
* @brief D-cache disable
*/
void l1c_dc_disable(void);
/*
* @brief D-cache enable
*/
void l1c_dc_enable(void);
/*
* @brief D-cache invalidate by address
* @param[in] address Start address to be invalidated
* @param[in] size Size of memory to be invalidated
*/
void l1c_dc_invalidate(uint32_t address, uint32_t size);
/*
* @brief D-cache writeback by address
* @param[in] address Start address to be writtenback
* @param[in] size Size of memory to be writtenback
*/
void l1c_dc_writeback(uint32_t address, uint32_t size);
/*
* @brief D-cache invalidate and writeback by address
* @param[in] address Start address to be invalidated and writtenback
* @param[in] size Size of memory to be invalidted and writtenback
*/
void l1c_dc_flush(uint32_t address, uint32_t size);
/*
* @brief D-cache fill and lock by address
* @param[in] address Start address to be filled and locked
* @param[in] size Size of memory to be filled and locked
*/
void l1c_dc_fill_lock(uint32_t address, uint32_t size);
/*
* @brief Invalidate all icache and writeback all dcache
*/
void l1c_fence_i(void);
/*
* @brief Invalidate all d-cache
*/
void l1c_dc_invalidate_all(void);
/*
* @brief Writeback all d-cache
*/
void l1c_dc_writeback_all(void);
/*
* @brief Flush all d-cache
*/
void l1c_dc_flush_all(void);

l1c_dc_disable:关闭dCache。此函数特别有用,在debug时如果怀疑是Cache导致的问题,在main函数开始关闭dCache再次运行即可排查是否是Cache导致的问题。注意,如果是用户程序运行过程中关闭dCache,需要在关闭前将执行l1c_dc_writeback_all,保证Cache数据写入Memory。

l1c_dc_enable:开启dCache。

l1c_dc_invalidate:将某地址范围内的Cache Line失效掉。无论某地址在Cache内是否命中,CPU会从Memory内拿数据。

l1c_dc_writeback:将Cache内数据写入某Memory地址。如果该地址在Cache内,则将该Cache Line写入Memory,并清除dirty标志。

l1c_dc_flush:该函数等于 l1c_dc_writeback + l1c_dc_invalidate,把数据写入到Memory并标记为invalidate,表示下次从Memory拿数据时不走Cache。

l1c_fence_i:将dCache内的数据全部writeback,将iCache内所有Cache Line invalidate。一般关闭Cache前会手动调用此函数。

l1c_dc_invalidate_all、l1c_dc_writeback_all、l1c_dc_flush_all:代表操作整个Cache中的Cache Line,具体含义不再赘述。

三、经验分享 

l1c_dc_writeback:一般非CPU的总线host,如DMA访问某Memory地址前,通过l1c_dc_writeback将Cache内的数据写到Memory,保证DMA拿到的数据与CPU看到的数据是一致的。

例如I2C_DMA例程:

/* setup i2c dma tx */
#if PLACE_BUFF_AT_CACHEABLE  
if (l1c_dc_is_enabled()) 
{      
    /* cache writeback before DMA sent data */      
    l1c_dc_writeback((uint32_t)tx_buff, TEST_TRANSFER_DATA_IN_BYTE);  
}
#endif  
stat = i2c_tx_trigger_dma(TEST_I2C_DMA,                          
                            TEST_I2C_DMA_CH,                          
                            TEST_I2C,                          
                            core_local_mem_to_sys_address(BOARD_RUNNING_CORE, (uint32_t)tx_buff),                          
                            TEST_TRANSFER_DATA_IN_BYTE);  
if (stat != status_success) 
{      
    printf("i2c tx trigger dma failed\n");      
    while (1) {      
    }  
}

在DMA将tx_buff数据搬到I2C的发送寄存器之前,进行了writeback。

l1c_dc_invalidate:一般CPU在读取Memory数据时,如果该数据被其它总线host如DMA操作过(一般是DMA搬了某些数据过去),为了能读到Memory中的数据而不是Cache中的数据,要在读取之前对Cache Line进行invalidate处理(多数开发者遇到的都是这个问题)。

例如I2C_DMA例程:

/* setup i2c dma rx */

  stat = i2c_rx_trigger_dma(TEST_I2C_DMA,

                          TEST_I2C_DMA_CH,

                          TEST_I2C,

                          core_local_mem_to_sys_address(BOARD_RUNNING_CORE, (uint32_t)rx_buff),

                          TEST_TRANSFER_DATA_IN_BYTE);

  i2c_master_start_dma_read(TEST_I2C, TEST_I2C_SLAVE_ADDRESS, TEST_TRANSFER_DATA_IN_BYTE);

  i2c_handle_dma_transfer_complete(TEST_I2C);

#if PLACE_BUFF_AT_CACHEABLE

  if (l1c_dc_is_enabled()) {

      /* cache invalidate after DMA receive data */

      l1c_dc_invalidate((uint32_t)rx_buff, TEST_TRANSFER_DATA_IN_BYTE);

  }

#endif

  check_transfer_data();

在进行check_transfer_data之前,先对数据进行了l1c_dc_invalidate处理。

l1c_fence_i:一般在CPU关闭Cache之前,或程序跳转之前(一般二级boot选择好要执行的固件进行跳转),为了保证所有dirty的Cache Line写入到Memory中,会进行l1c_dc_writeback_all,然后等 l1c_dc_writeback_all执行完毕后再跳转。

例如tinyuf2例程:

void uf2_board_app_jump(void)
{
    fencei();  
    l1c_dc_disable();  
    l1c_ic_disable();
       
    __asm("la a0, %0" ::"i"(BOARD_FLASH_APP_START + 4));  
    __asm("jr a0");
}

uf2_board_app_jump函数在跳转前,执行了fencei,本质上就是l1c_fence_i。

另外,在执行writeback操作期间中断不可用,对实时性要求高的场景应进行合理规划l1c_dc_writeback_all的使用。

四、文末小结 

Cache能大幅提高程序运行性能,但用不好Cache也会给开发者带来各种“奇奇怪怪”的问题现象。在阅读本文后,希望开发者对先楫的 L1-Cache有更深入的理解,使用先楫半导体高性能 MCU系列产品开发项目时,能更加得心应手。

来源:先楫半导体HPMicro

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

围观 64

1.jpg

来源:航顺芯片

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

围观 17

页面

订阅 RSS - MCU