MCU中的奇美拉——Cypress PSoC 6 Pioneer Kit 系列评测之一

奇美拉(Chimera)是古代西方神话中的一种怪兽,版本有很多种,但是有一个共同特点:身体由各种不同动物的部分组成。现代语言中,Chimera成为了一个典故,表示比较稀奇古怪的事物。将芯片比喻为奇美拉有点过于离奇,但是此文中介绍的芯片确实有类似的特征。

“”

本文的主角就是Cypress的PSoC 6系列的MCU,由于其特立独行的风格,值得作者写一个小小的系列来向大家介绍一下子。PSoC 6系列是Cypress推出的最新的MCU品种,按照官方说法,是专门为IoT产品设计而生的。与之相伴也推出了PSoC 6 BLE PioneerKit这个开发套件供用户学习该系列MCU。作者也拿到了此套件,准备就其特点写几篇介绍文章。相对于其他大路货的MCU,此款芯片比较重要的特点:

  • 双核心(little+big架构,注意不是CortexA系列的little+big架构,那个好几年前就有了);

  • 业内最低功耗的基于ARMCortex-M4内核的MCU产品;

  • 可编程的模拟(运放、比较器等)和数字外设(MCU外围有一圈类似于PLD的资源);

  • 内部集成电容触控和语音采集;

  • 图形化的开发环境及代码编辑生成方式;

还有一些其他特点,但是以上是最有个性的几点。所谓创新,也不一定完全是褒义。有很多创新过头的想法被市场差评的也不少。但是创新总是需要的,不然技术的进步如果只有频率与数量的傻瓜式前进则显得过于枯燥。作者想做的是将其特点尽可能展现出来供读者来评价其得失优劣。此篇是开篇,准备就大体特点介绍一下子,并且重点分析一下其双核心的特点。

板子与硬件

“图PSoC®
图PSoC® 6 BLE Pioneer Kit

整个套件包括:

  • 主开发板,其中包括主控和KitProg2调试器,以及配套的一系列器件,这个容后详述;

  • BLE的Dongle,用于插在电脑上做BLE实验,本集还不涉及到BLE内容,但后面会有介绍;

  • E-Ink的显示模块,想来似乎应该是想突出强调其芯片低功耗特性;

  • Type C的USB线缆,这也属于此开发板的奇葩之处,但是暂时不评论;

  • 几根线,用于做实验用,这是为没有硬件实验室的群众准备的;

以下展示几张作者拍的照片,如果拍的不好的话请勿吐槽,在关键之处作者会优先使用官方的照片的:

“图:盒子”

“图:盒子”
图:盒子

“图:板子正反面”

“图:板子正反面”
图:板子正反面

“图:

“图:
图: BLE Dongle

“图:
图: E-Ink显示模块

“图
图 :E-Ink与本人的电子书在一起

板子总体来说,做得很精致。下面简短介绍一下子重要的部件,太细节的就不管了,以免枝节太多影响理解:

“图
图 重要部分

如果有人要看所有的部件介绍,看这个好了:

“图:
图: 所有板上部件

原理图全部的打包文件进入以下链接下载:http://www.cypress.com/file/398046/download

板子看完了,来简短说说硬件。最主要就是这个PSoC 6的MCU了,属于新推出的系列。新到什么程度?连开发工具现在都只有Beta版本。

“图:
图: PSoC 6系列的几个子系列,而此次评测的先锋套件板载的是PSoC 63最高端的版本

“图:几个子系列的定位”
图:几个子系列的定位

Cypress的想法是,这个系列全用来开发IoT产品,比如一个可穿戴设备的构成:

“图
图 :可穿戴应用框架

跟目前已有的一些解决方案相比,这种方案有以下优点:

  • 内置资源丰富,比如BLE内置,PDM/PCM, 触摸感应功能全都内置;

  • 有可编辑的数字逻辑单元UDB类似于PLD,事实上UDB也不仅仅可以应用在此方案;

  • 模拟外设集成度高,比如比较器,ADC,OpAmp等可大大降低产品体积;

再看一张PSoC 6的系统框图:

“”

硬件方面,暂时只说这么多了。因为组成这个芯片的部件可能很多工程师都是了解的。但是其优点,其创新之处通过开发过程与应用才能更好体现出来。

软件开发

刚刚说了,这芯片系列属于还烫手的刚出蒸锅的包子。甚至乎连开发工具目前只有Beta版本。

Cypress公司当家的开发工具叫做: PSoC Creator,目前正式版本是4.1。

如果读者想开发PSoC 6的应用,请不要下载4.1的版本。要下载4.2的Beta版本,只有这个版本才能支持PSoC 6的开发:

https://community.cypress.com/servlet/JiveServlet/downloadBody/13747-102...
简单而言,PSoC Creator(以下简称Creator)是一个IDE,但是比常规的IDE功能要多,因为耦合了不少只属于该公司芯片特点的专用功能。除了普通的用法,即仅仅使用Creator进行开发,官方的教程中有该工具与其他工具配合的另外一种用法,与第三方的IDE混合使用:

“图
图 :Creator使用流程

另外如果用户如果只想使用PDL(Cypress公司的外设库,相当于其他公司的HAL库),也可以完全不用Creator:

“图:仅仅使用第三方工具开发”
图:仅仅使用第三方工具开发

这些灵活性当然是由于模块化设计的思想的丰硕成果,但是对于一般的用户来讲,最好不要玩这些花式开发。因为有很多功能只有Creator才有,再说除非有特别的理由,也没有必要把一堆工具切换来切换去的。来一张Creator的截图:

“图:Creator截图”
图:Creator截图

看到电路图没有,Creator的Style就是先画电路图,生成代码再开始软件开发。如果还要开发UDB,就还得搞HDL开发。事实上Cypress公司的器件对设计者带来了新的挑战,当然越灵活,可能性越大。设计者应该加强自身能力的培养,拥抱这种灵活性。

双核开发的迷思

双核开发,说起来很简单,但是一旦做起来又感觉到处都是不确定性因素。目前桌面电脑/服务器/手机等高端一点的设备早就进入多核心的时代。但是嵌入式领域,多核心编程属于很新的内容。就本人知识而言,目前推出多核心架构的深度嵌入式产品目前还不多。

就事论事,本开发板子上的主控CY8C6347BZI-BLD53拥有两个内核:

1、Cortex M4(最高150MHz)
2、Cortex M0+(最高跑100MHz)

为什么要弄两个核心呢?M4的性能强,M0+的功耗低,所以两者结合。在需要高性能的时候,开M4计算,需要使用频率高的监控采样时就开M0+。比如很多工业类的应用,很多无线通信协议(BLE就是一个例子)都需要频繁监控,回应,采样。这种场合,M4处理器经常醒来处理就不大节省功耗。单核心的架构中,内核在需要快速处理的时候醒来快速处理完马上回到休眠状态,这是经典设计。但是随着嵌入式系统的复杂性日益增长,多核心的必要性已经来临。目前作者知道的多核心嵌入式系统产品:

  • 英飞凌的Aurix处理器,多核心的动机是提升性能的同时增加系统的冗余性,毕竟汽车类电子安全相当重要;

  • XP的i.MX6系列,属于CortexA+Cortex M的架构,Cortex M只是打杂处理非常简单的任务,属于比较偏门的多核心;

  • NXP的LPC系列的某些型号,CortexM4+CortexM0的架构,与本文主角PSoC6类似,但是PSoC6采用的芯片工艺及芯片架构和设计特色不是LPC系列所抗衡的;

  • 上海乐鑫的ESP32有多核心的版本,一个处理业务,一个处理网络通信类;

至于桌面上的电脑,大多采用对称式的多核心,分担任务,因为目前的工艺在提升速度已经快到极限了;手机上的大多采用非对称式的多核心,也就是Little.Big模式,大多数时间只有Little内核运行以节省功耗,游戏视频则启用Big内核。PSoC6的多核心类似于手机上的Little.Big模式。

因为多核心是个很广泛的话题,这里也只能少讨论一些其他平台,就PSoC 6这个多核心处理器,作者把自己学习理解过程中的一些疑问与答案列一下子,相信也是大多数嵌入式程序员关心的话题:

问:启动的时候,两个核心是什么情况?
答:M0+先启动,M4默认情况是休眠的,这也符合大多数应用,M4只是需要他才唤醒。

问:两者怎么下载程序?
答:两者共享Flash空间,所以下载程序时下载一个hex就可以了。

问:怎么调试?
答:两个内核的调试单元是通用的,在Creator中可以选择要调试哪个内核。从Cypress文档上看,某些第三方调试器可以支持多核心调试,但是Creator目前只支持每次调试一个内核。

问:两者怎么通信协调?
答:跟所有多核心环境一样,共享内存,Mutex, Semaphore, Mailbox都可以。从硬件上的支持来看,IPC较为完备。可以想象两个内核是电脑程序上的两个Process。

问:两者时钟怎么关系?
答:通过外设分别为两个内核产生时钟。

以上是本人学习此处理器的首先研究的几个问题,当然其他人也许有其他问题可以写在下面来一起探讨。嵌入式处理器多核心环境怎么编程,是个很新的话题,作者相信搞得很透彻的人不多,大家应该多互相学习。

Creator开发实验

说了那么多,这里以一个实践工程来表现一下子Creator开发的过程。为了便于演示,这个工程的内容为:

  • M0+内核控制两个灯闪烁;

  • M4内核控制另外三个灯闪烁;

虽然号称多核心,这个工程的特点是:两个核心各自干各自的。至于双核心如何同步通信的内容,只能说后面的实验再来详述。本实验只是为了演示Creator开发的一些基本步骤,写多了反而看起来不易理解。

开始运行Creator 4.2,注意是4.2 Beta版本。下载地址上面有。

1. 建立工程

“图:
图: 新建空工程

这里建立空工程,各位有兴趣的可以试试在已有的例子上面修改。

2. 选择各种选项

“图:选择生成其他工具的文件”
图:选择生成其他工具的文件

因为这里不想跟任何第三方工具产生纠葛,全部Disable掉。

3. 选择保存地址

“图:保存地址”
图:保存地址

4. 开始创作

“图:创作电路图”
图:创作电路图

这里就跟画电路图类似,还要把原理图的一部分贴在这里以便理解:

“图
图 :LED相关原理图

所以说这些IO口都设定为开漏输出即可驱动LED。再拖几个电阻,LED,电源节点上来:

“图:
图: 拖上无源器件与电源节点

5. 分配引脚

“图:分配引脚”
图:分配引脚

其余时钟,中断什么的全部留默认的即可:

“图:其余留默认”
图:其余留默认

6. 生成代码

生成代码,就是将编辑的原理图,配置等等转换为代码的过程:

“图:生成代码”
图:生成代码

生成如果无误的话在左边项目结构中可以看到生成的代码,此处最关心生成的IO口宏:

“图:生成的代码”
图:生成的代码

7. 软件功夫

分别在M0+与M4的主文件中作如下编辑:

“”

“”

再就是build了,第一次build需要花点时间,因为有很多PDL的代码需要build,下次就好了。

8. 下载调试

“图:下载Hex”
图:下载Hex

再提一句,Creator这个工具目前只支持调试单核心,所以调试的时候要选择调试的内核:

“图:选择调试目标”
图:选择调试目标

如果是下载的话,哪个都可以,因为最后会把两个核心的代码合并成一个hex进行下载,选哪个核心下载效果都是一样子的。

到此为止,第一个多核心流水灯项目可以运行了。作者有一种眼花缭乱的感觉, 相信读者也觉得内容很多。此文中有如下几点与其它常规的嵌入式开发有些差别:

  • 通过画电路图的方式来配置IO,不仅仅配置IO属性,更要配置外部电路的属性;

  • 两个核心分别要编辑代码;

  • 要选择调试目标;

而这仅仅是多核心编程中最简化的模型,事实上所有的多核心模型中都涉及到任务通信,同步,资源共享,任务分配等内容。这些内容后面慢慢地写,大家有兴趣的话请关注后续内容。此集分享到此为止,除了上面给出的一些下载连接,本文的例子工程请点击阅读原文进行下载。

后面考虑做成GitHub的连接,以供更好的分享。下集见!

本文转载自: Cypress
转载地址:http://mp.weixin.qq.com/s/jYRNs42KKO0JHnkTbzQZtg
声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有,如涉及侵权,请联系小编邮箱:cathy@eetrend.com 进行处理。