MCU

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

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

今天,四维图新旗下杰发科技正式对外宣布,截止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)。

围观 60

经过前一期的芝识课堂,我们了解了东芝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)。

围观 109

近日,曦华科技与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)。

围观 40

新型可配置逻辑模块(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

围观 29

贾 工(先楫资深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)。

围观 431

1.jpg

来源:航顺芯片

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

围观 18

Holtek新推出具有LED调光功能OTP MCU HT45R5530,采用PSR Flyback电源设计架构,有源功率因子校正控制技术可以满足高功率因子>0.9、低谐波失真和高效率的性能要求。支持前沿相位角侦测,以及主动式Bleeder电路,搭配LED Driver驱动电路完成隔离型带MCU LED调光产品。适用于TRIAC LED调光照明或装饰光源、LED植物照明灯、养殖系统LED调光灯带、TRIAC可调光LED驱动器与其它照明类产品应用。

1.jpg

HT45R5530具备2K×15 OTP ROM、96×8 RAM、3通道输入8-bit SAR-ADC、8-bit PWM输出调光范围:5%~100%、±3% LED恒定电流调节、DRV最大500mA电流输出驱动MOSFET。并提供完善的保护功能增强产品安全性,例如:输出过压保护、输出短路保护、VCC过/欠压保护、外部/内部过温保护。HT45R5530提供16-pin NSOP封装。

来源:Holtek

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

围观 11

触摸屏介绍

对于四线电阻式触摸屏的结构如下图1,在玻璃或丙烯酸基板上覆盖有两层透平,均匀导电的ITO层,分别做为X电极和Y电极,它们之间由均匀排列的透明格点分开绝缘。其中下层的ITO与玻璃基板附着,上层的ITO附着在PET薄膜上。X电极和Y电极的正负端由“导电条”(图中黑色条形部分)分别从两端引出,且X电极和Y电极导电条的位置相互垂直。引出端X-,X+,Y-,Y+一共四条线,这就是四线电阻式触摸屏名称的由来。当有物体接触触摸屏表面并施以一定的压力时,上层的ITO导电层发生形变与下层ITO发生接触,该结构可以等效为相应的电路,如下图2。

1.png

图1. 触摸屏结构图

2.png

图2. 触摸屏等效电路

计算触点的X,Y坐标分为如下两步:

1) 计算Y坐标,在Y+电极施加驱动电压Vdrive,Y-电极接地,X+做为引出端测量得到接触点的电压,由于ITO层均匀导电,触点电压与Vdrive电压之比等于触点Y坐标与屏高度之比。

2) 计算X坐标,在X+电极施加驱动电压Vdrive,X-电极接地,Y+做为引出端测量得到接触点的电压,由于ITO层均匀导电,触点电压与Vdrive电压之比等于触点X坐标与屏宽度之比。

测得的电压通常由ADC转化为数字信号,再进行简单处理就可以做为坐标判断触点的实际位置。四线电阻式触摸屏除了可以得到触点的X/Y坐标,还可以测得触点的压力,这是因为top layer施压后,上下层ITO发生接触,在触点上实际是有电阻存在的。压力越大,接触越充分,电阻就越小,通过测量这个电阻的大小可以量化压力大小。

通常在触摸屏应用中对于触摸屏控制有专门的控制芯片,主要就是为了完成两个任务:其一,完成电极电压的切换;其二,采集接触点处的电压值(ADC数据)。本案例中触摸屏使用的触摸感应驱动芯片为XPT2046,显示器驱动芯片为ILI9341,下面将分别做介绍。

触摸感应器

触摸感应器使用的驱动芯片为XPT2046,其包含了采样/保持、模数转换、串口数据输出等功能。同时芯片集成有一个2.5V的内部参考电压源、温度检测电路,工作时使用外部时钟。XPT2046可以单电源供电,电源电压范围为2.7V~5.5V。参考电压值直接决定ADC的输入范围,参考电压可以使用内部参考电压,也可以从外部直接输入1V~VCC范围内的参考电压(要求外部参考电压源输出阻抗低)。X、Y、Z、VBAT、Temp和AUX模拟信号经过片内的控制寄存器选择后进入ADC,ADC可以配置为单端或差分模式。选择VBAT、Temp和AUX时可以配置为单端模式;作为触摸屏应用时,可以配置为差分模式,这可有效消除由于驱动开关的寄生电阻及外部的干扰带来的测量误差,提高转换准确度。

3.png

图3. XPT2046原理框图

LCD显示器

LCD显示器为一块240*320的RGB屏幕,使用驱动芯片为ILI9341。ILI9341能够支持并行和串行数据总线,此案例中我们使用串行总线接口(SPI)来进行数据传输。ILI9341驱动器能够通过窗口地址函数在内部GRAM中指定动态图像的区域,并且可选择地更新此窗口区域,这样就可以在独立于静态图像区域的同时显示动态图像。ILI9341支持全彩色,8色显示模式和休眠模式,能够通过软件进行精确的电源控制,使得ILI9341能够作为手机、MP3和PMP等便携设备理想的液晶驱动器。

触摸屏工作原理

下面将对XPT2046驱动芯片的工作原理进行介绍。

模拟输入

下图描述了XPT2046片内多路选择器、ADC的模拟差分输入和差分参考电压基准。

4.png

图4. 模拟输入简图

内部参考电压

XPT2046的内部2.5V参考电压源可通过控制位PD1进行关闭或者打开。一般地,内部参考电压只用于单端模式下Vbatt、Temp和AUX输入测量。使用差分模式,触摸屏可以获得最佳性能。如果要与ADS7843兼容,XPT2046的内部参考电压源必须强行关闭。因此,上电后要对控制位PD1置0以确保关闭内部参考源。

5.png

图5. 内部电压源示意图

外部参考电压输入

+REF和-REF(见图3)之间的电压差(下文用VREF表示)决定了模拟输入的电压范围。XPT2046的参考电压输入范围为1V~VCC。参考电压越低,则ADC输出的二进制数据结果每一个数字位所代表的模拟电压也越低。在12位工作方式下,数据结果的最低位所代表的模拟电压为VREF/4096,其余位依此类推。因此,参考电压越低,干扰引入的误差会越大,此时要求尽可能使用低噪声、低波动的参考电压源;在设计电路板时,尽可能减少干扰,输入的信号噪音也不能太高,否则会直接影响转换精度。

差分工作模式

如前所述,当触摸感应器XPT2046作为触摸屏应用时,可以配置为差分模式。差分模式的优点是:+REF和-REF的输入分别直接接到YP、YN上,可消除由于驱动开关的导通电阻引入的坐标测量误差。缺点是:无论是采样还是转换过程中,驱动开关都需要接通,相对单端模式而言,功耗会有增加。当SER/DFR置为低电平时,XPT2046为差分工作模式,如下图所示。

6.png

图6. 差分参考源工作模式简图

软件流程

接下来将简单介绍本案例的触摸屏驱动软件代码流程。首先上电之后需要对所用到的外设进行初始化,包括CRM、GPIO、SPI和DMA等外设。外设初始化完成后即可开始进行触摸校准,通过调用touch_adjust()函数完成。校准完成后会在屏幕显示一系列的校准参数,用于后续计算触摸坐标使用。随后,即可开始进行触摸测试,测试过程中会在屏幕画出已触摸的坐标点,以及坐标值。还设置了清屏按钮,点击即可清除屏幕已显示内容和坐标值。为了提高数据传输效率,此demo中清屏和画点数据通过DMA-SPI进行传输,软件流程图如下:

7.png

图7. 软件流程图

注:由于触摸校准对触摸功能来说是必须完成的,如果未完成校准则无法进行后续的工作。

触摸屏快速使用方法

硬件资源

1) AT32-Video-EV

2) 2.4寸TFT_LCD

3) AT-START-F403A V1.2实验板

8.png

图8. 触摸屏硬件资源图

Note:

1.该demo是基于AT32F403A的硬件条件,若使用者需要在AT32其他型号上使用,请修改相应配置即可。

2.供电部分:使用电源供电,或USB线供电(勿使用Link单独供电)。

软件资源

AN0154_LCD_Touch_Sourcecode,触摸屏案例测试代码,工程路径位于:Sourcecode\utilities\mdk_v5

关键代码

1) 触摸点坐标获取函数,用于获取触摸坐标值,关键代码如下:

9.png

2) 触摸校准函数,用于获取校准参数,关键代码如下:

10.png

3) 触摸屏测试函数,用于测试触摸屏,关键代码如下:

11.png

4) LCD清屏函数,用于清除显示内容,关键代码如下:

12.png

5) LCD画点函数,用于显示触摸坐标点,关键代码如下:

13.png

LCD Touch demo 使用

LCD Touch demo使用步骤如下:

1) 编译下载触摸屏案例测试代码。

2) 触摸屏进入校准界面,依次点击四个校准坐标点,如下图8。

3) 校准完成后LCD会显示校准信息,包含四个校准参数VX、VY、CHX和CHY,如下图9。

4) 点击屏幕任意处,将会跳转到触摸屏测试界面,此时触摸屏会将触摸点绘制在LCD上,还会实时显示触摸点的坐标,点击Clear按钮将清除界面,如下图10。

14.png

图9. 触摸屏校准界面

15.png

图10. 触摸屏校准信息

16.png

图11. 触摸屏测试界面

来源:AT32 MCU 雅特力科技

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

围观 60

天津易鼎丰动力科技有限公司(以下简称“易鼎丰”)与苏州国芯科技股份有限公司(以下简称“国芯科技”)近日签署了战略合作协议,共同推进汽车核心芯片的国产化应用,加速打造VCU控制器领域更具竞争力的解决方案。同时,易鼎丰全资子公司天津易鼎丰智控科技有限公司采购国芯科技新一代汽车电子高端MCU芯片CCFC3008PT 50万颗。

VCU(Vehicle Control Unit,车辆控制单元)是新能源汽车中的核心控制器之一,负责协调和管理车辆的动力系统、底盘系统、车身系统等多个子系统的运行。它确保车辆能够安全、稳定、高效地运行,例如通过发出加速、减速、制动等指令,以及进行故障诊断和处理。在电动汽车中,VCU主要负责电池管理、电机控制、能量回收等方面的控制。

易鼎丰在VCU控制器模组技术和产品量产方面具有丰富的经验,而国芯科技在汽车电子芯片如MCU芯片拥有强大的技术和量产能力,双方将秉持“优势互补、互惠互利、风险共担、共同发展”的原则,加速在VCU控制器领域打造国内最具竞争力的解决方案。此外,国芯科技还将提供技术支持,确保产品的品质和交期,并在批量生产阶段向易鼎丰提供符合各项要求和标准的产品。易鼎丰未来将在其VCU产品中全面采用国芯科技汽车电子MCU芯片。

值得一提的是,近期易鼎丰在承接的动力域控制器项目中选用了国芯科技的国产汽车电子MCU—CCFC3008PT,该芯片的功能、性能、可靠性均很好满足项目需求,保证了项目顺利推进。在项目开发中,易鼎丰和国芯科技充分发挥在自身领域深厚的经验积累与先进的技术能力,实现了100%国产化VCU的装车目标并全力确保后续批量供货。

1.png


国芯科技作为国内领先的芯片设计公司,专注于国产自主可控嵌入式CPU技术的研发和产业化应用。在汽车电子、信息安全、工业控制和边缘计算等多个关键领域,国芯科技已经建立起扎实的研发和产业化基础。在汽车电子领域,公司建有江苏省汽车电子芯片工程研究中心,牵头组建了“苏州自主可控智能汽车电子芯片创新联合体”,致力于建设自主可控的“芯片-软件-模组-整车应用”生态链,实现我国汽车产业的供应链安全。目前已在汽车车身和网关控制芯片、动力总成控制芯片、域控制芯片、新能源电池管理芯片、车联网安全芯片、数模混合信号类芯片、主动降噪专用DSP芯片、安全气囊芯片、线控底盘、仪表、辅助驾驶芯片和智能传感芯片等12条产品线进行全面布局,具备较强的汽车电子芯片研发和产业化能力。

易鼎丰专注于新能源与智能网联汽车控制领域的技术研发、产品制造。建立了基于ISO 26262的功能安全开发流程,拥有基于AUTOSAR架构的软件开发及包含需求分析、系统设计、硬件设计、软件设计、测试标定等全流程的车辆控制技术开发能力。在自动驾驶方向,拥有自动驾驶域控制器ADCU及全套的解决方案。公司拥有先进的自动化SMT生产线,控制器产品已进入Stellantis(原法国PSA)、VALEO、上汽通用五菱、东风小康、重庆金康、中国重汽、一汽富奥等国内外汽车产业链核心企业的配套体系。公司联合上汽通用五菱等多家整车企业,率先实现全国产化芯片VCU量产供货。

随着新能源汽车市场的不断扩大,汽车电子芯片的需求也将持续增长。易鼎丰和国芯科技的合作将有望推动高端MCU芯片的国产化替代进程,集合双方优势提升国产VCU芯片的品质和性能,降低对进口芯片的依赖,推动我国汽车电子芯片产业的进一步发展。

来源:苏州国芯科技

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

围观 42

一、升级原理

芯片在应用前,是一颗裸片,内部没有任何驱动或应用程序。芯片在贴上PCB板子后,会实现各种功能,这是时候会开发对应的驱动或者应用程序,在芯片上面运行的程序,一般称之为固件(Firmware)。

把固件烧录进芯片,一般通过J-link、DAP、UART、Bluetooth等途径,我们公司芯片支持J-link、UART两个途径升级芯片固件,本文档主要说明通过UART升级芯片固件。

通过UART(也叫ISP)升级芯片固件,分以下两种模式:

A. 双线模式,即TX+RX模式,需要6根接线:TX、RX、VDD、GND、RESET、BOOT。

B. 单线模式,即TX&RX&BOOT模式,即TX、RX、BOOT共用一根线,需要4根接线:TX&RX&BOOT、VDD、GND、RESET。

升级方法:芯片上电,拉低RESET引脚,然后拉高BOOT引脚,等5-10mS,再拉高RESET引脚,保持BOOT引脚为高电平并持续5mS以上,芯片即进入ISP升级模式。当芯片进入ISP模式后,既可按照ISP协议(一般为自定义协议,非国标)进行升级。

二、升级框架

ISP升级框架:

1.png

ISP底层:为芯片出厂前已固化的ISP code,不占用MCU 的FLASH空间,专门用于通过ISP接口给MCU烧录(或升级)应用&驱动固件。

三、升级协议

1.命令格式说明 

上位机和下位机发送和接收的命令采用字符形式,每个命令后面都有“\r\n”;收发数据的格式采用 UUcode 编解码格式;

2.通信错误类型分类: 

a) “E0”:表示接收到非法命令或者下位机解析命令失败; 

b) “E1”:表示擦除 FLASH 操作失败; 

c) “E2”:表示写入 FLASH 操作失败; 

d) “E3”:表示写入 SRAM 操作失败;

e) “E4”:表示待写入 FLASH 的数据不是 1 页或者写入 SRAM 的数据超过 1 页。

3.具体命令格式说明: 

a) 波特率同步命令:M->"sync\r\n",S->"sync\r\n";

b) 设置波特率命令:M-> "baudrate 000000\r\n",S-> "OK\r\n";

c) 获取版本号命令:M-> "version\r\n",S-> "SWM24V20\r\n"; 

d) 擦除 FLASH 命令:M-> "erase 0000 0000\r\n",S->"OK\r\n"; 

e) 写入 FLASH 命令:M->"copy 00000\r\n",S->"OK\r\n"; 

f) 写 SRAM 命令 1:M->"write\r\n",S->"OK\r\n"; 

g) 写 SRAM 命令 2:M->"W UUencode Checksum\r\n",S->"OK\r\n"; 

4.说明 

a) 上位机开发的时候可以预置各个芯片 Flash 的 sector 以及 page 大小,也可以下载的时候选择,并以此计算来下发读写命令。

b) 上位机操作 flash 单位为 sector 和 page,下载不满一个 page 时候填充 FF。 

c) 下位机的写入 FLASH 命令是固定 1 个页大小的数据。 

d) 下载文件时,分小包编码传输给下位机,下位机接收到后把多个小包文件解码组合 成一个大包(一个 page),等待上位机传输 copy 命令,再写入 flash。具体编码格 式见文件末尾。

四、升级流程

本节主要说明MCU端(被动应答)ISP升级流程:

1. 获取MCU型号

2.jpg

说明:

A.上位机发送“version\r\n”。

B.下位机回复芯片版本号。

2. 配置波特率

3.png

说明:

A.以目的波特率为9600为例。

B.上位机先以4800波特率发送"sync\r\n"命令,等待下位机以4800波特率回复"sync\r\n"。

C.上位机以4800波特率发送"baudrate 000000\r\n",000000格式如下:

a) SWM120、SWM160、SWM181、SWM220、SWM260芯片,000000 = 24M/16/Baud。

b) SWM190芯片,000000 = 24M / Baud;

c) SWM320芯片,000000 = 20M / 16 / Baud;

d)例如SWM181 需要设置9600波特率,则000000 = 24M / 16 / 9600 = 000156,则此步骤需要发送"baudrate 000156\r\n"。

D.下位机收到后回复"OK\r\n",然后切换波特率到9600。

E.上位机接收到"OK\r\n"后,延时5~10ms,改变波特率到9600,然后发送"sync\r\n"。

F.下位机接收正常后返回"sync\r\n"。

G.上位机接收到"sync\r\n"后提示握手成功。

3. 擦除flash流程

4.jpg

说明:

A.上位机先发送"erase 0000 0000\r\n"命令(其中0000 0000表示发送字符形式的擦除起始扇区和要擦除的扇区个数,例如要擦除下位机第8扇区开始的4个扇区则发送"erase 0008 0004\r\n")。

B.等待下位机回复"OK\r\n",表明擦除FLASH成功;下位机回复"E1\r\n",表示擦除FLASH失败。

4. 写SRAM流程

5.jpg

说明:

A.上位机先发送"write\r\n"命令,等待下位机回复"OK\r\n"。

B.上位机发送"W UUencode Checksum\r\n",等待下位机回复"OK\r\n",表明一帧数据写入SRAM成功。

a) UUencode 表示编码后的数据。

b) Checksum表示编码前数据的校验和。

c) 具体格式参见文章末尾编码说明。

5. 写FLASH流程

6.jpg

说明:

A.上位机发送"copy 00000\r\n"命令(其中00000表示字符形式的起始页,例如要写入第8页起始的1页数据则发送"copy 00008\r\n")。

B.下位机回复"OK\r\n",表明写入FLASH成功。

五、通过ISP升级(烧录)的优缺点

优点:

1. 一芯片的SWD引脚一般跟GPIO引脚复用,如果需要扩展GPIO,就需要禁用SWD功能,这种情况下升级就可以通过ISP接口。

2. 单线ISP模式,只需要一个ISP引脚、一个RESET引脚、一个GND,为精简接口模式。

缺点:如果产品已装机,用ISP升级,也需要拆机进行。

来源:华芯微特32位MCU

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

围观 161

页面

订阅 RSS - MCU