【每周点评】第二十五期:双核单片机--LPC4357-EVB开发板

  [复制链接]
  • TA的每日心情
    开心
    2016-12-27 14:02
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2015-1-20 12:00:32 | 显示全部楼层
    分享到:
    看起来不错啊
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-7-8 16:17
  • 签到天数: 971 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2015-1-20 16:19:37 | 显示全部楼层
    LPC4357-EVB,开发板搭载了丰富的资源:一个完整的音频电路,丰富的存储空间、两个USB接口、一个4.3英寸的LCD接口等外设,板卡核心更是采用了NXP的非对称双核微控制器LPC4357FET256,基于ARM Cortex-M4以及Cortex-M0,主频高达204MHz,M4作为主应用处理器,M0则作为协处理器,双核分工明确,有效的释放了M4的潜能,提升了整个微控制器的性能,可使之灵活适用于各种领域

    双核就是任性!这是高上大的板主。由于缺少LCD模组?寄过来,我帮你测试
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-11-2 10:47
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2015-1-21 14:08:13 | 显示全部楼层
    什么价格啊,好早就看到这颗芯片了。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2015-8-25 10:41
  • 签到天数: 66 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2015-1-21 15:39:55 | 显示全部楼层
    最近在忙先占个楼再说
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2019-12-1 10:07
  • 签到天数: 1617 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2015-1-22 13:08:24 | 显示全部楼层
    双核控制器,M0做控制方便,低功耗性能也好。M4做计算、算法,速度快,资源多。这样比用两个独立的MCU体积小,成本低,而且方便两个MCU共享数据。

    双核控制器,比较适合做复杂控制,如汽车电子、PLC、电梯,在高端领域应该有不错的前景。

    评分

    参与人数 1与非币 +10 收起 理由
    EEboard爱板网 + 10

    查看全部评分

    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2016-1-22 11:18
  • 签到天数: 159 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2015-1-22 17:05:38 | 显示全部楼层
    支持活动  话说好高端的样子
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2016-1-22 11:18
  • 签到天数: 159 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2015-1-22 17:16:58 | 显示全部楼层
    三轴加速度模块很不错  我如果做空中鼠标类似摇杆的控制类应用应该很需要
    复杂的功能M4去做,简单的低功耗的M0去做,这样更省电,而且M4内核相当强大,M0内核相当精简,互为补冲吧
    我觉得可以在手表 pda 智能家居方面用  
    双核微控制器 只要功耗没问题 是很有前景的

    评分

    参与人数 1与非币 +10 收起 理由
    EEboard爱板网 + 10

    查看全部评分

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-10-6 10:14
  • 签到天数: 867 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2015-1-23 09:13:39 | 显示全部楼层
    本帖最后由 青遥 于 2015-1-23 09:15 编辑

    其实这块板子最大的亮点还在这个芯片本身。
    关注这个芯片有2年多了,市面上采用这种架构的嵌入式芯片本来就不多,加上NXP业界良心的性能,我还是很看好这系列型号的~唯一可惜的就是推广的有点慢,很长一段时间只有这种BGA封装的在售。
    我觉得一般的控制有一般的M3内核的芯片也就搞定了。但是这种双核处理器的架构和无限的可玩性才是它的亮点。一般的电子工程师都是从51开始玩起,针对于这种双核处理器多少还是有些陌生的,至少我感觉是这样,也正是因为这点也充满了好奇。想要发挥这个芯片全部的性能必须要提升自己的水平才是,多核处理器编程的一些基本方法、并行计算的一些问题。。我觉得从这个芯片入手十分合适。市面上采用4357芯片主控的开发板不多,价格也是比较高,想要练练手这个还是不容错过滴。
    最后附上一片文章,看了绝对开阔眼界(至少当初我看完是这么觉得,之后就一直收藏起来)


    应用非对称双核MCU增强系统性能
    本文从对比两颗分立MCU与单芯片双核MCU开始(以LPC4350为例),展开介绍了非对称双核MCU的基础知识与重要特点。接下来,重点介绍了核间通信的概念与几种实现方式,尤其是基于消息池的控制/状态通信。然后,对内核互斥、初始化流程等一些重要的细节展开了论述。最后提出了双核任务分工的两种应用模型,并分别举例。
    背景与基本概念
    在开发MCU应用系统时,如果单颗MCU无法满足系统的要求,一个很普遍的做法就是使用两颗或更多的MCU,把一部分“杂项工作”分配给另一个有“助理”性质的低端MCU来完成。但是,采用两颗MCU,缺点也很明显,尤其是在芯片与PCB成本、系统可靠性及功耗方面都有先天的不足。此外,若采用了不同架构的MCU,还要面临需要不同的开发工具与开发人员的挑战。如果换一种思路,让MCU内部包含两个内核,其中一个用于主控,另一个用于协控,并且它们主控与协控在架构上能够向下兼容、高效通信,则在很多场合下都可以既保持多机系统的强大,又能避免多机系统的不足。
    事实上,这即是“非对称多处理器(简称AMP)”架构的特点。AMP是与“对称多处理器(简称SMP)”相对的架构,后者各处理器有一致的编程模型,并且在分配工作时主要以均衡为原则。而AMP的优点在于精细的任务分工,灵活地适应不同情景,物尽其用,以最佳地平衡成本、性能与功耗。此外,AMP的编程难度也更低。因此,在MCU应用领域,AMP较SMP更为适合。
    与独立的双MCU相比,AMP架构有很多优点。其中相当关键的就是,再添加一个内核的代价远比添加一个独立的MCU要低,尤其是当两个内核架构相似时,甚至仅相当于在现有硅片上再添加一两个UART。另一方面,两个内核可以有相同的主频,并且可以通过总线矩阵平等地访问片上资源。而在分立的双MCU方案中,协控MCU的主频常常远低于主控,并且双方使用低速的串行链路通信。
    接下来,我们以恩智浦(NXP)半导体公司新推出的LPC4300系列为例(尤以LPC4350型号为代表),对AMP MCU进行简单介绍。
    非对称双核MCU的特点
    AMP MCU一般用于相对大型的系统,这些系统对功能和性能都有较高的要求。在功能上,应支持较多的外设。LPC4350片载2个高速USB、2个CAN、工业以太网、图形LCD控制器,以及SDHC等接口;外加一些独有的逻辑可配置外设以及众多传统外设,适用于工控、能源、医疗、音频、车载、电机、监控等众多行业产品的开发。
    性能的改善则是AMP MCU的灵魂。内核、存储器,以及总线架构对于性能有着至关重要的影响。图1展示了LPC4350的实现方式。
    1.jpg

    图1:LPC4350的内核、存储器以及总线连接图。
    首先是内核的选择。LPC4350基于32位的ARMCortex-M4和Cortex-M0内核(以下简称M4和M0),两个内核均可在高达204MHz的主频下执行代码。其中,M4以信号处理和浮点运算能力见长,胜任很多原先要采用DSP才能满足的应用,并且继承了Cortex-M3的控制能力;另一方面,M0以其成本、能效和处理能力的压倒性优势,正迅速吸引开发人员从8/16位架构向上过渡。更重要的是,M4完全向下兼容M0,使用同一套开发工具即可开发、调试。其次是存储器的容量和组织方式。LPC4350配备多达264KB片上RAM,并且这些RAM被划分成4组,每组连接一条单独的总线,而并非没有分块。如若不然,则会出现两个核竞争使用同一块RAM的情况——性能反而还不如只用单个内核!进一步,LPC4350还有两条总线连接到外部扩展的并行和串行存储器,故总共有6个独立的存储器地址空间——LPC4350无片上闪存。对于有片上闪存的型号,片上闪存也分为两块。
    最后是总线架构。LPC4350内部有一个八层总线矩阵。它如同一组纵横开关,可以把CPU与包括存储器在内的众多从设备通过总线任意连接。合理分配总线接通关系,避免多个主设备(如CPU和DMA)同时访问相同的存储器或外设,可以最大地保证各条数据流并行不悖,从而可以充分发挥性能上的优势。
    内核间通信
    内核间的通信可分为两类:一类是控制与状态信息的通信,另一类则是数据通信。前者一般不携带数据,但往往有较高的实时要求;后者则主要是各类数据缓冲区,通常实时性要求偏低但数据量大。控制/状态通信有较大的通用性,并且与任务间的同步较为相似。这类通信适合由系统软件实现并提供编程接口。数据通信则往往与具体应用相关较大(尤其是在数据结构上),需要量体裁衣。在实现时,适合由应用软件定义各种数据结构。
    内核间通过共享的RAM进行通信,并且每个内核都可以触发对方的一个中断源,通过准备数据-触发中断的方式进行通信,如图2所示。当然,内核也可以定期检查共享RAM的状态。

    2.jpg
    图2:内核间使用共享内存通信模式图。
    接下来,我们介绍基于消息队列和消息池的控制/状态通信方案。
    消息队列:开设两个消息队列,一个用于M4发送消息给M0,另一个则是M0发送消息给M4。两个队列的地址需事先约定好。队列是循环队列,可以使用简单的数组配以读、写下标来实现,也可以使用链表结构来实现。前者实现简单、开销小,但消息只能是定长,不便于携带其它信息,还有,就是必须把数组放置在共享内存区连续的位置,灵活性低。基于链表的实现用指针链接每则消息,每则消息除了公共的链表控制部分外,还可以根据消息类别携带各种各样的附加参数,并且可以由系统软件的内存管理机制灵活分配消息内存,不过,缺点是相对复杂,额外开销大。若涉及动态内存管理,实时性将远不如基于数组的方案。
    消息队列有一个缺点,就是消息的串行化处理,它没有优先级的概念。但实际上,我们有实时操作系统(RTOS)及嵌套中断机制的支持,本应实现消息的并发处理。
    消息池:消息池在存储结构上其实是简化的基于数组的消息队列——去掉了队列的读、写下标记录器。池中每个元素是一个消息,并且有一个字节指示每个元素的状态——空闲/已处理、新、半处理。当发送方写入消息时,扫描数组以查找空闲位置;当接收方读取消息时,也是扫描数组以查找状态。可见,消息池是基于优先级来处理消息的——小下标的元素优先得到处理。
    消息池的可扫描性实现了消息的并发处理,并且可以通过中断上下文和任务上下文分两次“反刍式”处理。在处理消息池的中断服务例程中,先扫描各消息完成第一次处理,执行消息中(如果有的话)对实时性要求较高的部分。如果系统中没有使用RTOS,可以在后台的主循环中,再接下来二次扫描消息池,以完成第二次处理。对于使用了RTOS的系统,可以根据消息的优先级,创建或激活不同优先级的任务,使消息“附身”在这些任务的上下文中得到第二次处理。
    消息池的一大缺点就是不宜支持较大数目的待处理消息。如有需要,可以给每则消息添加链表控制字段,我们可以把同一优先级的消息链成一串,从而彻底消除这一局限。
    若干重要的细节
    内核互斥:伪并行的多任务之间需要互斥访问共享资源,真并行的内核之间更是如此。尤其关键的是,一个内核无法关闭另一个内核的中断,因此还无法通过关中断临界区来保护。唯一能保证的,就是不会出现两个内核同时存取相同的地址。另外,由于架构上的局限,无法使用“自旋锁”来互斥。为此,我们可以通过施加一些编程准则来实现互斥。最简易有效的方法,就是在相同地址上给每个内核分别设置“只读”或“只写”的权限,或者是有条件的读写权限。比如,对于消息队列的读位置,只有接收方可以写,而发送方只能读取来判断队列是否空/满。又如,对于消息池,尽管发送方和接收方对池中的元素状态均可读可写,但有如下的条件:发送方只能把空闲状态改为非空闲;接收方只能把各种非空闲的状态改为空闲。再如,对于链表结构,可以只允许发送方更新各种指针;接收方通过更改链表中元素的状态和触发中断,以指示发送方更新各指针的时机。内核鉴别:M4向下兼容M0,这使我们可以重用很多的源代码。但是,有时需要鉴别当前正在哪个内核上运行。这有两种方法,分别用于不同场合:如果在编译期间鉴别即可,则可以在编译器设置中,预定义诸如“CORE_M4”和“CORE_M0”的宏,使用C/C++的条件编译来处
    理;若需要在运行期间区分,可以读取一个名为“CPUID”的寄存器,根据CPUID的值来判定是M4还是M0。
    初始化与可执行映像:LPC4350在完成上电复位后,M4开始执行代码,而M0却一直保持在复位状态。这样,我们也可以无视M0的存在,而只按单核MCU来使用。为使用M0,需要让M4为M0准备好开始执行的全部环境,包括寄存器上下文与地址空间等,然后释放M0。当M0处在复位状态时,我们可以通过JTAG发现M0,但是却无法操作它。因此,如果要调试M0的程序,需要先给M4下载适当的映像,使其释放M0才可,不可能在拿到一个空白的芯片后,直接先从M0动手。
    尽管M4与M0各有自己的映像,但是我们可以把M0的映像内含于M4的映像中,这样在生产时只需要烧写一次闪存。为了并入M0的映像,工具链通常会提供把映像转换成C数组定义格式的功能。通过这个功能,我们把M0的映像转换成一个C数组的表格,并且把它和M4的源文件一同编译连接,这样一来,M0的映像就嵌入到M4的映像中了。M4在初始化期间,要把M0的映像拷贝到准备让M0执行的位置。由于M0固定从零地址开始取向量,M4还需要设置M0的地址映射,把映像的首地址设置成为M0的零地址。
    值得一提的是,这种“主控带动协控”的设计哲学,也是被AMP普遍采用的。
    调试时的细节:当我们使用调试仿真器连接MCU时,通常都会产生复位信号,但范围可仅限于内核,也可复位全片。在调试M0时,需设置复位范围仅包括M0,避免殃及正在运行的M4。另外,也需要编写适当的调试初始化脚本,以准备好内核的执行环境。这些工作繁琐,但具有高度的通用性,我们可以借鉴现有的脚本。
    我们可以同时调试M4和M0:只需运行两个独立的IDE进程,分别打开相应的工程即可。经实践,至少在MDK+ULINK下可行。
    核间任务分工
    M0没有M4强大的处理能力,但是作为一个CPU,亦有完整的中断系统和基本的算术与数据传送能力,并且在LPC4350上,可以在高达204MHz的主频下运行。合理地分担一些任务给M0,才能利用双核设计的优势。接下来,我们讨论两种主要的任务分工模型。
    处理高频中断——智能“DMA”:中断的响应是有额外开销的:既包括CPU的中断模型本身产生的硬件开销,也包括操作系统的中断管理产生的软件开销,当然,也还有中断服务程序本身执行的开销。当中断的频率很高时(比如:高达几十甚至几百kHz),中断的响应将对CPU时间产生不可忽略的额外开销。更重要的是,中断的响应是由硬件处理,并凌驾于任务管理之上的,这可以影响任何任务的执行而不论其优先级如何。DMA明显改善了这一状况。但是当DMA通道或总线分配不足,或者是设备不受DMA支持时,我们就可以让M0来响应这些高频的中断,合理组织数据缓冲区,而如同一个智能的DMA一样。
    例如:在调光设备中,需要进行多达几十甚至上百路的AD采样来获取每路灯光的预期亮度,以及同样多的LED来指示实际输出的亮度。后者需要非常多的PWM,极可能已超出硬件PWM通道的数目。因此,在实现AD采样与软件PWM时,均需要快速的通道数据流处理与高频LED刷新,以保证PWM精度。这两者很容易导致高达几十kHz的中断请求,仅中断响应的额外开销就可占用一半以上的CPU时间。传统的做法是使用若干颗MCU来分摊并由主控轮询。在LPC4350下,则可由M0来处理这些任务。同样的例子也适用于PLC应用,它需要快速地刷新多路控制。
    为弱计算操作提供额外的处理能力:M0的整体性能约是M4的72%,但对于弱计算操作(如:加减乘与逻辑运算,移位,以及简单的数据传送),并没有太多劣势。弱计算操作在程序中往往占一半以上的比例,尤其体现在驱动程序及一些通信协议栈上。合理地分配一部分弱计算操作任务给M0,可以有效提升整体的处理能力。这样,完成相同的任务只需更低的主频,而降低功耗,或者反过来,能够在有限的主频下完成需求更大的任务。
    例如:在高精密工业运动控制中,对于电机的控制往往需要运算量很大的算法,同时又要处理如CAN、工业以太网,以及各种现场总线的通信。我们可以让M4来运行电机控制算法,而通信协议栈与驱动程序则由M0来完成。同样的例子也适用于嵌入式音频——由M4执行音频编解码与音效处理算法,而M0则负责音频总线、USB等事务。
    本文小结

    通过以上的介绍可以看出,相比传统的使用多颗MCU的方案,非对称双核MCU在性能、成本、功耗、生产等诸多环节都有明显的优势。核间通信稍显复杂,但作为基础设施可由底层系统软件来实现。在具体开发时,应根据实际问题合理分配任务,并且在初始化流程、内核鉴别以及调试上,需注意一些操作细节。
    作者:宋岩
    高级应用工程师
    恩智浦半导体





    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-7-4 13:51
  • 签到天数: 347 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2015-1-23 20:39:48 | 显示全部楼层
    1 LPC4357-EVB是一款基于双核微控制器的开发板,功能还算比较全面,板载的哪些功能是你目前需要的?
    就评测所述来看,这款开发板只能说是中规中矩,最大特色就是双核,只是没有实际的测试,不知这双核处理的效果与实际用M4芯片+M0芯片外搭的效果哪个好,而且如果是项目使用,还得考虑成本、稳定性之类的
    2 LPC4357-EVB搭载了全球首款Cortex-M4与Cortex-M0内核的微控制器,你认为NXP为什么会选这两个处理器的组合?
    M4+M0的组合其实现在很多项目中都会出现,让M4专注于复杂的处理,简单的全由M0负责。只是双核的芯片这比较有特色有吸引力
    3 NXP LPC4357微控制器不但性能出众,功能也非常的丰富,你认为可以在哪些领域大展作为?
    很多,涉及视频或图像处理或其他的复杂运算的,都可以
    4 你怎么看双核微控制器的市场前景?
    前途未知,现在MCU的性能都是越来越强,ARM、FPGA等界限也是越来越模糊。适应市场需求的,就是最好的
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-6-22 23:57
  • 签到天数: 943 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2015-1-25 14:08:11 | 显示全部楼层
    本帖最后由 franki 于 2015-1-25 14:09 编辑

    LPC4357-EVB是一款基于双核微控制器的开发板,功能还算比较全面,板载的哪些功能是你目前需要的?
            板载三轴加速度模块,SDRAM,摇杆控制,LCD接口是目前需要的。由于没拿到板子测试,不知道他们性能如何。
    LPC4357-EVB搭载了全球首款Cortex-M4与Cortex-M0内核的微控制器,你认为NXP为什么会选这两个处理器的组合?
            处理器达到204MHz主频,M4可以专心的去做复杂的计算,简单的控制M0可以来实现,而且M0是低功耗,对整个系统的功耗影响不大。分工明确,双核功能强大,而且功耗不是很大。
    NXP LPC4357微控制器不但性能出众,功能也非常的丰富,你认为可以在哪些领域大展作为?
            LPC4357在图像处理,大数据的计算有优势。在云计算,电力系统,可穿戴设备,工控领域等都有很大的市场。
    你怎么看双核微控制器的市场前景?
            双核是以后做复杂控制的趋势,双核之间数据的共享,高效的数据传输给双核实现复杂控制带来了较大的方便。拿LPC4357-EVB来说,M0有效的分担M4的部分任务,尽情的释放Cortex-M4的潜能。在成本容许的条件下,相信工程师们都会选择双核处理器。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-18 13:14 , Processed in 0.217792 second(s), 33 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.