天南地北客
发表于: 2018-5-23 20:53:00 | 显示全部楼层

microsemi-smartfusion-maker-kit-large.jpg


简介

Microsemi Maker-Board是一款采用SmartFusion 2 SoC的低成本评估套件。 SmartFusion 2将ARM Cortex-M3处理器与Microsemi基于闪存的FPGA架构集成在一块芯片上,并结合许多SoC用户习惯的外设,如RAM和DSP模块。 Maker-Board增加了以太网接口、环境光传感器、SPI Flash以及一些按钮和LED。该开发板还保留了两个不同WiFi模块(ESP32和ESP8266)的连接接口。


本指南的目标是创建一个演示项目,利用Maker-Board上的大多数外设,并为开发自定义应用程序提供一个起点。本示例使用FreeRTOS和ESP8266模块创建IoT数据记录设备。


所需的材料

本教程需要以下软件:

●     Microsemi Libero SoC v11.8或更高版本。本指南使用v11.8 SP1。

●     Microsemi SoftConsole v4.0

●     FreeRTOS源代码

●     FreeRTOS指南

●     ESP8266命令参考

●     Maker Board原理图

注意:请确保下载SoftConsole v4.0或v5.1。 SoftConsole v3.4不支持板上使用的FlashPro 5编程硬件。 SoftConsole v5.2 +可能会运行,但需要对下面概述的内容进行重大更改。


硬件配置

SmartFusion 2硬件的配置通过Libero完成。由于这个例子没有在FPGA中使用任何IP,Libero将被用来设置Cortex-M3并选择使用哪些外设。


1.   创建一个新的Libero项目。

Project.PNG


2.    选择M2S010-TQ144作为目标设备。

Target.PNG


3.    单击Next,选择默认的Device Settings

4.    选择Create a system builder based design,然后单击Next

System Builder.PNG


5.    点击Finish。不需要HDL源,稍后会添加约束条件。

6.    如果提示您选择约束流,请选择Enhanced Constraint Flow

7.    Libero会要求给系统起名。选择合适的名称,然后点击OK

8.    System Builder将会打开。

System Builder 2.PNG


9.     点击Next

10.    在外设页面上,启用MM_UART0、MM_UART1、MSS_I2C0MSS_GPIO

11.    对于每个外设,单击Enable左侧的Configure按钮。将Connect To更改为Fabric

Configure.PNG


12.     对于GPIO外设,将GPIO 0-7设置为连接到FABRIC_AOutputs

GPIO.PNG


13.    MSS Peripherals左边的圆圈现在应该是绿色的,表示配置有效。点击Next

14.    从下拉菜单中选择On-chip 25/50 MHz Oscillator作为时钟源。点击Next

15.    单击Next选择默认的Microcontroller配置。

16.    单击Next选择默认的SECDED配置。

17.    单击Next选择默认的Security配置。高级安全功能仅适用于制造商委员会不使用的“S”后缀部分。

18.    单击Next选择默认的Interrupt配置。在这个例子中没有使用结构中断。

19.    单击Next选择默认的Memory Map配置。在这个例子中没有使用存储器映射的外设。

20.    点击Finish创建系统。将在程序框图中创建一个实例。

21.    打开左侧的IP Catalog并展开Macro Library。将BIBUF宏的两个实例拖到设计中。

22.    选择MM_UART0、MM_UART1GPIO_FABRIC接口并右键单击它们。选择Promote to Top Level

23.    展开剩余的组并选择INIT_DONE、FAB_CCC_LOCK、FAB_CCC_GL0MSS_READY。右键单击它们并选择Mark Unused

24.    如下图所示连接剩余的信号。

System Diagram.PNG

25.    保存程序框图,然后点击左上角的Generate Component按钮。

26.    导航回到左侧的Design Flow面板。选择Synthesize

27.    您将在消息中看到许多涉及未使用组件的警告,并且可以安全地忽略它们。

28.    合成完成后,从“Design Flow”面板中选择“Manage Constraints”。

Const Man.PNG

29.    选择New → Create New I/O Constraint from Root Module。 Libero将自动生成一个约束文件,该文件由程序框图中的顶层端口填充。

30.    右键单击生成的文件并选择Set as Target

31.    选择Edit → Edit with I/O Editor

32.    根据下表设置I / O约束。如果这些设置不可用,请检查IO Bank设置以设置存储区电压。

Constraints.PNG

33.     保存约束并关闭I/O Editor窗口。

34.     返回到“Design Flow”面板中,选择“Place and Route”。

35.     布局布线完成后,运行Generate FPGA Array Data。

36.     FPGA阵列数据生成后,运行“Generate Bitstream”。

37.     使用USB电缆将Maker-Board连接到计算机。选择Run PROGRAM Action将配置加载到电路板上。

38.     在“Design Flow”面板的底部附近,选择“Configure Firmware Cores”。

Firmwares.PNG

39.    确保选中所有生成代码所需的固件。 在开始时应为每个外设启用一个外设。 Libero会要求下载计算机上尚未存在的任何内核。

40.    从Design Flow面板中,选择Export Firmware。 选择SoftConsole4.0作为Software IDE。 选中Export hardware configuration and firmware drivers。

Export.PNG

41.    硬件配置现已完成。

跳转到指定楼层
天南地北客
发表于: 2018-5-30 22:22:41 | 显示全部楼层

软件应用

硬件配置完成后,就可以开发软件应用了。如前所述,本示例使用FreeRTOS操作系统创建一个将数据上传到ThingSpeak的IoT传感器节点。同时还会创建一个UART桥,以允许用户手动向ESP8266模块发送AT命令。


功能说明

本节将简要介绍该示例程序中的四个主要任务。对FreeRTOS的一些了解将会有所帮助。


这个程序中的main()函数负责:

●    调用硬件外设(UART、I2C、GPIO)的初始化函数

●    为两个UART创建接收任务

●    创建任务来读取I2C传感器

●    创建任务,将传感器数据发送到WiFi模块

●    启动FreeRTOS调度程序


一旦调度程序启动,程序将在处理以下的任务和基于优先级的中断之间交替。


vTaskSpinLEDs()大约每85毫秒执行一次。它只是简单地切换SmartFusion 2的GPIO输出,为8个板载LED创建“旋转”效果。


每次通过UART接收到一个或多个字节时,都会执行vTaskUARTBridge()函数。

●    当发生UART中断时,中断处理程序(prvUARTRxNotificationHandler)将“发出”任务通知,表明数据可供读取。当中断处理程序退出时,任务将立即开始执行。

●    该任务尝试执行一个任务通知,就像信号量一样。如果没有可用的通知/数据,则任务将阻止,直到数据可用。

●    收到通知时,数据将被复制到缓冲区并通过UART0上的终端连接回显。

     ●    如果收到的数据来自UART0(终端),它将被累积在缓冲区中,直到接收到\ n字符。累加的字符串然后被发送到UART1上的ESP8266。

     ●    如果收到的数据来自UART1(ESP8266),则会对其进行累计并检查“OK”或某种错误并通知上传任务。


只要数据可以从光传感器读取,vTaskUARTUploadData()每20秒执行一次。它只是将来自传感器的数据格式化为AT命令字符串,并将其发送到UART1上的ESP8266。下面是使用的AT命令。

  1. AT+CIPSTART="TCP","184.106.153.149",80                          # Start a TCP connection to the ThingSpeak API server on port 80
  2.   
  3. AT+CIPSEND=XX                                                   # Declare a transfer of XX bytes to the server
  4.   
  5. >GET /update?api_key=XXXXXXXXXXXXXXXX&field1=yy&field2=zz        # Send a GET request using a custom API key and two data values
  6.   
  7. # Server will respond with the number of entries on the channel and close the connection
  8. # +IPD,3:539CLOSED
复制代码

vTaskReadLightSensor()在第一次执行时初始化I2C传感器。随后的每次执行都会轮询传感器以获取新数据。如果有新的数据存在,则从传感器读取数据,并将包含新数据的通知发送到上传任务以进行处理。然后该任务将阻止传感器的采样率(默认为500 ms)。


软件配置

在编写代码之前,按照SoftConsole v4.0发行说明中所述使用SoftConsole v4.0时,需要采取一些初始化步骤。 Libero中生成的固件内核也需要导入到项目中。

1.     打开SoftConsole并选择一个方便的目录作为工作区。

2.     在SoftConsole中,选择File → New → C Project

C Project.PNG


3.    给该项目起个名字。确保选择Cross ARM GCC作为工具链。

4.    单击Next,选择默认的配置。

5.    确保工具链名称是GNU Tools for ARM Embedded Processors(arm-none-eabi-gcc)。点击Finish

6.    项目创建完成后,在Project Explorer中右键单击它。选择Import。选择导入一个File System

7.    浏览到Libero的固件导出目录。检查固件文件夹以包含其中的所有文件。

Import Firmware.PNG


8.    选择复制到项目工作区中的名为firmware新文件夹。单击Finish将固件文件导入到项目中。

9.    在Project Explorer中右键单击项目。选择Properties。展开C/C++ Build选项卡,然后单击Settings

10.    在Tool Settings → Cross ARM C Linker → General下,单击右上角的Add.. 按钮,选择链接器脚本。 该脚本位于firmware/CMSIS/startup_gcc/debug-in-microsemi-smartfusion2-esram.ld中。

Linker Script.PNG


11.    在Tool Settings → Cross ARM C Linker → Miscellaneous下,勾选Use newlib nano (--specs=nano.specs)复选框。

12.    在Tool Settings → Cross ARM C Compiler → Miscellaneous → Other compiler flag下,输入(不带引号)“--specs = cmsis.specs”。

13.    选择顶部的Toolchains选项卡。 在底部附近,勾选Create extended listing选项。

14.    单击OK,应用更改。

15.    选择Run → Debug Configurations。 双击GDB OpenOCD Debugging创建一个新的配置。

16.    单击Debugger选项卡。 将 Config options更改为“--command”set DEVICE M2S010“--file board / microsemi-cortex-m3.cfg

Debug Conf.PNG


17.    现在基本的设置已经完成了。 稍后,一旦项目构建完成后,可执行文件将被添加到配置中。

回复

使用道具 举报

天南地北客
发表于: 2018-5-31 08:17:59 | 显示全部楼层

导入FreeRTOS

软件配置完成后,下一步就是将FreeRTOS源代码导入到项目中。使用SmartFusion 2时FreeRTOS不是必需的,但可以在将项目扩展到更高级的应用程序时使得多任务更容易。

1.    下载并解压FreeRTOS源码到一个合适的位置。

2.    在FreeRTOS的Demo目录中找到CORTEX_SmartFusion2_M2S050_SoftConsole文件夹。运行CreateProjectDirectoryStructure.bat文件设置项目。

3.    在SoftConsole中,右键单击该项目并选择Import。在General下,选择File System。导航到FreeRTOS源代码所在的文件夹。

Import RTOS.PNG


4.    选中整个FreeRTOS-Source目录,并且也要导入RTOSDemo目录的FreeRTOSConfig.h。演示中的其他文件可能会包含在官方FreeRTOS演示中,以供参考,但对于此示例不是必需的。

5.    在工作区中选择一个文件夹导入这些文件,如../FreeRTOS。单击Finish将文件导入到项目中。

6.    现在,所有FreeRTOS源文件都应在项目中可以使用。


导入示例源代码

下面的链接下载示例项目的源代码:

示例Source.zip

按照上述步骤将文件导入SoftConsole。

Source Import.PNG


Include路径

现在项目中应该已经包含了所有的文件,但尝试构建该项目会导致无法找到包含文件的错误。 SoftConsole需要被告知在哪里寻找所有刚导入的头文件。

1.    在项目上单击鼠标右键。选择Properties

2.    展开C/C++ General部分。选择Paths and Symbols

3.    通过使用 Add.. → Workspace → <Folder>,将以上导入的所有文件夹添加为包含路径。最终结果应该如下所示:

Includes.PNG


4.    SoftConsole现在应该能够找到所有需要编译的头文件。


连接到ThingSpeak

要完成示例项目,需要一个免费的ThingSpeak帐户。 ThingSpeak是来自MathWorks的物联网数据记录平台。本节假定您已经创建了一个帐户。

1.    在ThingSpeak中创建一个至少有2个数据字段的频道。根据需要填写其他信息。由此产生的着陆页将如下所示,但没有任何数据条目。

ThingSpeakView.PNG


2.    点击API Keys选项卡查看您的个人Write API Key。复制此密钥。

3.    在SoftConsole中打开uart.c。在函数vTaskUARTUploadData中,将ucGetReq []中的API密钥值更改为上面的密钥。


  1. void vTaskUARTUploadData(void *pvParameters)
  2. {
  3.     const uint8_t ucConnectCmd[] = "AT+CIPSTART="TCP","184.106.153.149",80\r\n";
  4.     const uint8_t ucSendCmd[] = "AT+CIPSEND=";
  5.     const uint8_t ucGetReq[] = "GET /update?api_key=XXXXXXXXXXXXXXXX&field1=";      // Replace this API key with your own
  6.     const uint8_t ucField2[] = "&field2=";
  7.     const uint8_t ucCloseCmd[] = "AT+CIPCLOSE\r\n";
  8.     const uint8_t ucCRLF[] = "\r\n";
  9.   
  10.     /* ... */
  11. }
复制代码

构建并运行该项目

此时,该项目应该准备好在开发板上构建并运行。如果汇编中收到任何错误,请返回并检查以确保所有内容均如示例中所示。

1.    在SoftConsole中,选择Project→ Build All (Ctrl + B)编译项目。

2.    构建完成后,选择Run →  Debug Configurations

3.    点击Search Project按钮查找刚创建的.elf文件。它应该是唯一的选项。

Elfs.PNG


4.    使用提供的USB电缆将开发板连接到PC。

5.    单击Debug 以在硬件上启动该程序。您应该可以看到LED以“旋转”模式闪烁。


使用演示程序

首次启动演示程序时,负责将数据上传到ThingSpeak的FreeRTOS任务将被禁用。然后,SmartFusion仅作为PC终端和插入电路板的ESP8266模块之间的UART桥。其原因是允许用户在开始自动上传任务之前手动配置ESP8266以连接到WiFi接入点。当然,如果需要,用户可以将此功能添加到应用程序代码中。一旦模块连接到接入点,即使在电源重新上电后,它仍会继续尝试连接到该接入点。


打开您选择的终端程序。Maker-Board开发板应该在计算机上创建4个顺序的COM端口。 UART连接将会是第三个。


串口设置为波特率115200 - 8个数据位 - 1个停止位 - 无奇偶校验。确保在按下回车键时将终端设置更改为追加CR + LF。但是,波特率可能会因安装在ESP模块上的固件而异。


1.    使用以下命令连接到接入点。每个成功的命令都应返回“OK”。

  1. AT+CWMODE=1                                     # Set the module to station (client) mode
  2.   
  3. AT+CWLAP                                        # List all visible APs
  4.   
  5. AT+CWJAP="<SSID>","<PASSWORD>"                  # Join an AP
复制代码

2.    当ESP8266已成功连接到接入点时,返回到SoftConsole并在文件main.c中更改下面的行:

  1. /* Standard includes. */
  2. #include <stdio.h>

  3. /* Kernel includes. */
  4. #include "FreeRTOS.h"
  5. #include "task.h"
  6. #include "semphr.h"

  7. /* Driver includes. */
  8. #include "drivers/mss_uart/mss_uart.h"  // For baud rate defines and instances

  9. /* Application includes. */
  10. #include "leds.h"
  11. #include "uart.h"
  12. #include "i2c.h"

  13. /* Set to 1 to enable the upload tasks once the module has been set up */
  14. #define ENABLE_UPLOAD    1                  // Change from 0 to 1
  15.   
  16. /* ... */
复制代码

3.    重建项目。该程序现在将创建两个读取I2C环境光传感器的FreeRTOS任务,并将该数据发送给ThingSpeak。大约每20秒,SmartFusion 2现在应该通过WiFi发送更新。


结论

本指南提供了一个基于FreeRTOS的Microsemi Maker-Board示例程序,该程序使用了大部分板载的外设。这个例子应该会为用户开发他们自己的应用程序提供一些基础,不管是有没有使用到FreeRTOS。


附加信息

加利福尼亚大学欧文分校与Microsemi一起为Maker-Board开发板制定了自己的演示项目,其中包括ESP32以及ESP8266的示例。他们的工作归档在下面的GitHub页面上:

CalPlug GitHub

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 73 | 回复: 123



手机版|

GMT+8, 2024-12-21 22:02 , Processed in 0.065191 second(s), 9 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表