RED-V 硬件说明

 

SparkFun很高兴地欢迎一个全新的指令集架构(ISA)加入其家族,RISC-V ISA(发音为 “risk-five”),并同时介绍RED-V RedBoard(发音为 “red-five”)。在本教程中,我们将重点介绍硬件。

SparkFun很高兴地欢迎一个全新的指令集架构(ISA)加入其家族,RISC-V ISA(发音为 “risk-five”),并同时介绍RED-V RedBoard(发音为 “red-five”)。在本教程中,我们将重点介绍硬件。

RED-V 硬件说明

简介

RISC-V ISA与其他的不同之处在于它是完全开源的;包括指令集架构(ISA)。这意味着任何人都可以充分利用微控制器,而不需要版税、许可证或保密协议(nda)。RED-V以熟悉的Arduino Uno形式出现,包括SiFive Freedom E310核心,32MB QSPI flash, NXP K22 ARM Cortex-M4用于USB连接和作为JTAG接口操作,以及Qwiic连接器。

硬件概述

有几种不同的方式为SparkFun RED-V RedBoard供电:

  • USB-C
  • 桶形插孔连接器
  • 电路板边缘的电源针脚。

power

最简单的方法(这也将允许你对你的板子进行编程)是通过USB-C简单地将它插入你的电脑。这将为电路板提供5V电压,也将允许你访问超酷的USB-to-JTAG接口进行编程。然而,一旦你对你的RED-V进行编程,你可能想让它在不同的电源下运行。如果你在USB-C接口上使用一个壁挂炉,请确保它输出一个稳定的5V直流电。你也可以使用黑色的桶状插孔,在这种情况下,你将需要任何7-15伏直流的墙面适配器。或者你也可以通过板子边缘断开的接头针脚来供电。如果你使用VIN和GND,请遵循与使用墙壁适配器相同的做法,坚持使用7-15伏的电压。如果你使用5V和GND或3V3和GND,确保你的电压在分别向5V或3.3V引脚供电时得到调节。

永远在线

aon

FE310包含一个始终在线(AON)模块,可以方便地对FE310进行电源控制。它包括自己的实时时钟,并与电路板上的 “唤醒 “按钮相连。这样就可以使FE310进入睡眠状态,并在时间产生的或用户产生的中断时将其唤醒。

按钮

botton

RED-V有两个按钮:一个复位按钮和一个唤醒按钮。RESET按钮的作用不言而喻,它是用来重置FE310的。点击一下RESET按钮,就可以运行加载在FE310的QSPI闪存中的代码。快速点两下会使FE310进入安全引导程序模式,如果你把事情搞得一团糟(比如说,我把核心放到了睡眠状态,却忘了添加唤醒它的方法),这将允许你把新的代码写入RED-V。这个引脚在电路板的边缘也被断开了。从这个引脚添加一根跳线到GND也可以重置电路板。

跳线

jump

FE310也有几个跳线,默认情况下都是打开的。位于I2C标签旁边的两个跳线是用于I2C的上拉电阻。由于所有SparkFun Qwiic从机上都有I2C上拉电阻,所以这些电阻在默认情况下没有连接。如果你使用的是第三方的电路板,你可能需要关闭Qwiic连接器旁的跳线,以便将上拉电阻连接到I2C总线上。USB-C接口旁边的跳线是用来绕过0.5A的PTC保险丝的。这是为需要大量电流的特殊情况准备的。大多数时候,你可以让这个跳线打开。

硬件连接

在本教程的范围内,你将使用USB C线为电路板供电、上传代码和发送串口。只需连接计算机的USB端口和RED-V。该板使用标准的Arduino Uno R3脚印,带有母头,可以堆叠Arduino盾牌,用跳线轻松连接面包板上的原型电路。

hookup

注意:虽然该板使用标准的Arduino Uno R3脚印,但请记住该板使用3.3V逻辑电平。此外,Arduino盾牌可能只针对AVR架构和Arduino编程语言开发。你可能需要付出更多的努力来编写一个库,以便根据FE310和你喜欢的编程语言使其工作。

软件开发指南

有几个环境可以开始使用RED-V。关于RED-V RedBoard的编程信息,请查看教程

资源和进一步发展

现在您已经成功地开始使用RED-V RedBoard,是时候将其纳入您自己的项目中了!请查看以下资源。欲了解更多信息,请查看下面的资源:

RED-V 开发指南

简介

本指南将帮助您启动和运行RED-V RedBoard或Thing Plus的排气口。根据个人的喜好,有几种环境可以开始使用板子,我们要全速前进了。

警告:请勿尝试对NXP K22 ARM Cortex-M4进行重新编程。 它具有专有的Segger固件闪存到芯片上,从而可以将程序上传到SiFive Freedom E310内核。 对NXP K22 ARM Cortex-M4进行重新编程将覆盖固件,并且您将不再能够对板子进行编程。 要更换固件,您需要与他们的一名程序员一起从Segger购买许可证。

什么是RISC-V?

RISC-V(发音为 “risk-five”)是一个自由和开放的指令集架构(ISA),由加州大学伯克利分校的计算机科学部开发。RISC-V ISA旨在提供 “一个自由的、可扩展的软件和硬件自由架构的新水平”。根据RISC-V基金会的说法,RISC-V的主要优点是:

  • “软件架构师/固件工程师/软件开发人员
    • RISC-V不仅仅是一个开放的ISA,它也是一个冻结的ISA。基本指令被冻结,已被批准的可选扩展也被冻结。由于ISA的稳定性,软件开发可以自信地应用于RISC-V,知道你的投资将得到保护。为RISC-V编写的软件将永远运行在所有类似的RISC-V内核上。冻结的ISA提供了一个坚实的基础,软件经理可以依靠它来保护他们的软件投资。因为RISC-V ISA是开放的,这意味着硬件工程师对处理器的实现有更大的灵活性。有了这种能力,软件架构师可以在最终的硬件实现中变得更有影响力。他们可以向硬件设计师提供意见,使RISC-V核心更加以软件为中心。

SiFive Freedom E SDK 指南

这个由SiFive公司维护的资源库,使人们可以很容易地开始为Freedom E和Freedom S嵌入式RISC-V平台开发软件。这个SDK的目的是在SiFive发行的RISC-V GNU工具链所支持的任何目标上工作。

Freedom E SDK的文档可在此获得

Freedom E SDK最近已经过渡到使用Freedom Metal兼容库。如果你正在寻找旧的Freedom E SDK、软件实例和板卡支持文件,你可以在v1_0分支找到这些文件。

什么是Freedom Metal?

Freedom Metal文档 是由SiFive开发的一个库,用于为SiFive的所有RISC-V IP、RISC-V FPGA评估镜像和开发板编写可移植的软件。根据Freedom Metal API编写的程序旨在为所有SiFive RISC-V目标构建和运行。这使得Freedom Metal适用于编写可移植测试、裸机应用编程,以及作为硬件抽象层将操作系统移植到RISC-V。

内容

Freedom Metal 兼容库

  • BSP(在bsp/目录下)
    • 支持的板卡
    • Freedom Metal 库的板卡支持文件完全位于bsp/<target>/的单一目标目录中。例如,Freedom Metal 的HiFive 1板卡支持文件完全在 bsp/sifive-hifive1/ 内,包括以下内容:
      • design.dts
        • 目标设备的DeviceTree描述。这个文件是用来为目标设备设置Freedom Metal 库的参数。它被包括在参考文件中,以便Freedom Metal的用户了解目标设备上有哪些功能和外设
      • metal.h
        • Freedom Metal 的头文件,在Freedom Metal内部用于实例化结构以支持目标设备。
      • metal.%.lds
        • 为目标生成的链接器脚本。不同的脚本允许不同的内存配置。
      • openocd.cfg
        • 用于配置OpenOCD,以便对目标设备进行flash下载和调试。
      • settings.mk
        • 用来设置RISC-V GNU工具链的-march-mabi参数。
    • 一些编译示例(包含在software/)
      • empty
        • 空的工程
      • hello
        • 如果目标上有一个串行设备,则向stdout打印 “Hello, World!”。
      • sifive-welcome
        • 打印欢迎信息并与LED灯互动。

设置SDK

先决条件

要使用这个SDK,你的机器上需要有以下软件:

  • GNU Make
  • Git
  • RISC-V GNU Toolchain
  • RISC-V QEMU 4.1.0 (用于qemu-sifive-*的模拟目标)
  • RISC-V OpenOCD (用于开发板和FPGA目标的使用)
  • Segger J-LINK (用于某些开发板)

安装RISC-V工具链和OpenOCD

RISC-V GNU工具链和OpenOCD可以从SiFive网站上获得,网址是:https://www.sifive.com/boards

对于OpenOCD和/或RISC-V GNU Toolchain,为你的平台下载.tar.gz,并将其解压到你想要的位置。然后,在使用工具时使用RISCV_PATHRISCV_OPENOCD_PATH变量:

cp openocd-<date>-<platform>.tar.gz /my/desired/location/
cp riscv64-unknown-elf-gcc-<date>-<platform>.tar.gz /my/desired/location
cd /my/desired/location
tar -xvf openocd-<date>-<platform>.tar.gz
tar -xvf riscv64-unknown-elf-gcc-<date>-<platform>.tar.gz
export RISCV_OPENOCD_PATH=/my/desired/location/openocd
export RISCV_PATH=/my/desired/location/riscv64-unknown-elf-gcc-<date>-<version>

Install RISC-V QEMU 4.1.0

RISC-V QEMU仿真器可从SiFive网站获得,网址是:https://www.sifive.com/boards

为你的平台下载.tar.gz并解压到你想要的位置。然后,将QEMU添加到你的路径中:

cp riscv-qemu-<version>-<date>-<platform>.tar.gz /my/desired/location
tar -xvf riscv-qemu-<version>-<date>-<platform>.tar.gz
export PATH=$PATH:/my/desired/location/riscv-qemu-<version>-<date>-<platform>/bin

安装Segger J-Link软件

Freedom E SDK支持的一些目标(如SiFive HiFive1 Rev B)使用Segger J-Link OB进行编程和调试。如果你打算使用这些目标,请为你的机器安装Segger J-Link软件和文档包。

Segger J-Link软件下载

克隆存储库

这个版本库可以通过运行以下命令来克隆:

git clone --recursive https://github.com/sifive/freedom-e-sdk.git
cd freedom-e-sdk

--recursive 选项是必须的,以克隆包含在版本库中的 git 子模块。如果一开始你省略了--recursive选项,你可以通过使用命令更新子模块达到同样的效果。

git submodule update --init --recursive

更新您的SDK

如果您想将您的SDK更新到最新版本:

git pull origin master
git submodule update --init --recursive

使用工具

构建一个例子

要编译一个裸机RISC-V程序:

make [PROGRAM=hello] [TARGET=sifive-hifive1] [CONFIGURATION=debug] software
# 对应 RED-V 红板
make PROGRAM=sparkfun-welcome TARGET=sparkfun-redv CONFIGURATION=release upload

上述命令中的方括号表示Make调用的可选参数。正如你所看到的,这些参数的默认值告诉构建脚本用调试配置来构建sifive-hifive1目标的hello例子。例如,如果你想用release配置为S51 Arty FPGA评估目标构建定时器中断的例子,你可以运行以下命令:

make PROGRAM=timer-interrupt TARGET=coreip-s51-arty CONFIGURATION=release software

建立一个基准程序

构建一个基准程序有点特别,因为某些部分需要加载到特定的内存区域。一个专门的链接器文件已经为其最佳运行而创建:

make PROGRAM=dhrystone TARGET=coreip-e31-arty LINK_TARGET=ramrodata software

上传至目标板

make [PROGRAM=hello] [TARGET=sifive-hifive1] [CONFIGURATION=debug] upload

调试一个目标程序

make [PROGRAM=hello] [TARGET=sifive-hifive1] [CONFIGURATION=debug] debug

清理目标程序的build目录

make [PROGRAM=hello] [TARGET=sifive-hifive1] [CONFIGURATION=debug] clean

创建一个独立的项目

你可以使用standalone目标将一个程序导出到独立的项目目录。由此产生的项目将被锁定在一个特定的TARGET上。请注意,这个功能只支持Freedom Metal程序,不支持传统的Freedom E SDK。

STANDALONE_DEST是一个必要的参数,提供所需的项目位置.

make [PROGRAM=hello] [TARGET=sifive-hifive1] [INCLUDE_METAL_SOURCES=1] STANDALONE_DEST=/path/to/desired/location standalone

运行make hlep获得更多命令

更多信息

文档、论坛和更多信息可在:dev.sifive.com