2.1
需求分析及技术指标
2.1.1
需求分析
VME
总线控制器需要实现数据传输、中断处理、测量显示等功能。同时还需
要具有操作系统、底层驱动程序以及功能接口等,以方便用户进行上层应用软件开
发及使用。
本课题需要实现
VME
控制器的国产化开发,因此需要选择一款国产处理器作
为主控单元。
VME
控制器需要有视频接口、
USB
接口、网口等用来接外设,还需
要有
PCI
、
PCIE
或者其他总线接口和
FPGA
进行通信。
国产
CPU
厂家主要有飞腾、龙芯、申威和瑞芯微等。飞腾
FT-2000A/2
采用
ARMv8
架构,但是其技术支持和开源资料较少,并且相关的开发板很少。龙芯
2K1000
处理器具有
PCIE
、
GMAC
、
USB
等接口,符合控制器接口需求,但是其架
构兼容
MIPS
,并且朝着龙芯自主指令架构
LoongArch
的方向发展,不如
ARM
架
构流行,并且对
linux
生态兼容性不够好,设计难度可能会比较大。申威
421
处理
器采用
Alpha
架构,支持
PCIE
接口,但是缺少其他通用外设接口,并且技术资料
较少。瑞芯微处理器采用
ARM
架构,功耗低且性能良好,接口丰富,开发资料完
善,在市场上比较流行,满足控制器需求。
因此经过综合考虑,本课题选择使用瑞芯微
RK3399
处理器。
RK3399
使用大
小核架构,即两个
Cortex-A72
大核和四个
Cortex-A53
小核。在性能上,
RK3399
主
频最高为
1.8GHz
,
DDR
接口
DDR3/LPDDR3
最高工作频率支持到
800MHz
,满足
嵌入式控制器的需求;在功能接口上,
RK3399
具有以太网控制器、
PCIE
控制器、
USB
控制器、
HDMI
控制器等,为控制器板卡的设计提供了极大的方便。
在软件方面,本课题使用
Linux
操作系统作为控制器的操作系统。
Linux
系统
自诞生到现在,得益于全世界开发者的不断努力,其系统功能越来越强大,稳定性
等方面更加完善。
Linux
系统具有开源免费、稳定性好的优点,得到许多领域的公
司和工作人员的青睐和使用。因此使用
Linux
操作系统完全满足本课题的需求。
2.1.2
技术指标
根据
VME
总线控制器的实际使用环境和设计需求,提出
VME
控制器的技术
指标如下:
1
)遵循
VME
总线规范,尺寸为标准
3U
,双槽宽度;
2
)
CPU
:使用
ARM V8
架构处理器,主频最高
1.8GHz
;
3
)内存:
2GB
板级
LPDDR3
内存;
4
)外存:
16GB
板级
eMMC FLASH
;
5
)网口:一路千兆以太网;
6
)串口:
RS232
串口一个;
7
)
USB
:两个
USB2.0
接口;
8
)视频:
HDMI
接口。
2.2
硬件总体方案
根据本课题的技术指标和需求,基于
RK3399
处理器的
VME
总线控制器硬件
总体框图如图
2-1
所示。整个嵌入式控制器以
RK3399
处理器为核心,同时有搭配
处理器的外围电路和接口电路。
硬件总体包括
RK3399
处理器最小系统(信迈RK3399核心板)、控制器接口、
VME
总线接口三个部 分。RK3399
最小系统主要包括电源、时钟、复位以及存储电路。控制器接口主要
有网口、串口、
USB
接口以及
HDMI
接口。
RK3399
处理器通过
PCIE
总线连接外
部设备
FPGA
,在
FPGA
内部实现
PCIE
总线到
VME
总线的接口逻辑转换。
其中,
FPGA
选用紫光同创的
logos2
系列的
PG2L100H,该芯片具有丰富的逻
辑资源,并且带有
HSST
收发器,可以支持
PCIE GEN1/GEN2
,并且支持在线调试
工具,非常符合本课题的设计需求。
2.2.1
处理器最小系统方案
RK3399
处理器最小系统由处理器、电源、时钟、复位和存储电路组成,是处
理器正常工作的最小单元。以下主要介绍
RK3399
最小系统的电源设计方案、时钟
和复位设计方案以及存储器设计方案。
1
)电源设计方案
为了满足低功耗的要求,
RK3399
中设计了一个电源管理单元
PMU
来控制电
源资源,
PMU
用于管理整个芯片的电源。
RK3399
包括
6
个电压域,同一模块的上电顺序为低压先上、高压后上,并且
遵循相同的电压一起上电原则,不同模块之间没有上电顺序的要求。
为使电源设计更加可靠,本次电源设计采用电压管理芯片
RK808-D
和几个分
立的电源芯片相结合的方法。使用瑞芯微推出的集成电源芯片
RK808-D
,它能很
好的支持
RK3399
处理器,同时使用多块分立的
DC-DC
电压转换器,共同完成整
个系统的电源设计。
RK808-D
是一颗专为便携式系统设计的,高度集成的电源管
理芯片。该芯片包括
4
个开关电源通道(
DC/DC Switch Regulator
),
8
个高性能线
性稳压源(
LDO
),
2
个低导通内阻的开关(
Switch
)以及一个实时时钟(
RTC
)。
该芯片相对于传统的系统电源设计,提高了性能,降低了外围元件数量和尺寸,成
本更低。
2
)时钟和复位设计方案
时钟电路主要包括
24MHz
的系统时钟和
32.768KHz
的
RTC
实时时钟。
RK3399
在正常工作的情况下使用
24M
系统时钟,在待机时会使用
32.768KHz
的时钟,这
样可以降低系统功耗。
RTC
时钟能够为控制器系统提供准确的时间基准。使用无源晶振先接到
RK808-D
内部集成的
RTC
,然后输出给
RK3399
。
复位电路的功能是使系统上电之后从确定的状态运行,并且在系统运行出错
常时,通过手动复位强制系统回到正常工作状态。
RK3399
内部集成
POR(Power on
Reset)
电路,低电平有效,为保证芯片稳定和正常工作,所需的最短复位时间为
100
个
24MHz
主时钟周期,即至少
4us
以上。
RK808-D
电源芯片在上电完成之后,会
输出一个复位信号,可以将此复位信号作为
RK3399
的系统复位信号。
3
)存储器设计方案
RK3399
的存储器包括内存
DDR
和外存
flash
,内存是
CPU 可以直接访问的
空间,
DDR
内存掉电后数据会丢失,优点是读写速度快,适合程序运行。外部存
储用来存储程序代码和重要数据。
RK3399
处理器的
DDR
控制器接口支持
DDR3
、
DDR3L
、
LPDDR3
、
LPDDR4 SDRAM
标准接口,
DDR3
、
LPDDR3
最高工作频率
支持到
800MHz
。支持两个通道,每个通道数据宽度
16
位或
32
位。综合考虑成本
和性能后,本设计采用两片
32
位
LPDDR3
内存颗粒作为控制器的板级内存,满足
控制器的设计需求。
RK3399
处理器的系统启动引导顺序优先级从高到低依次为:
SPI FALSH
、
eMMC FLASH
(内嵌式多媒体存储卡)、
SDMMC CARD
。其中,
SPI Flash
启动主
要应用在
Netbook
中。
eMMC
是一种嵌入式非易失性存储器系统,由
Nand flash
和
Nand flash
控制器组成,以
BGA
方式封装在一个芯片上。由于
SD
卡启动方式相
对比较复杂,故本次设计使用
eMMC FLASH
引导系统启动。
2.2.2 VME
总线接口方案
VME
总线接口主要有两种设计方案:一种是使用现成的
VME
接口芯片;二
是采用
FPGA
逻辑设计并且配合驱动电路来实现。
常用的
VME
接口芯片有
VIC64
和
SCV64
等,使用
VME
接口芯片需要通过
接口转接与
RK3399
处理器连接,并且会被专用芯片的接口所限制,设计上不够灵
活且可移植性较差。
使用
FPGA
设计
VME
接口逻辑需要对
VME
总线规范和时序等比较熟悉,设
计起来比较灵活,可以根据自身的需求进行相应的设计,修改起来也比较方便。而
且采用
verilog
逻辑语言实现
VME
接口,不会受制于国外的专用芯片,逻辑移植
也比较方便。本设计采用第二种方案,使用国产紫光同创的
FPGA
来设计
VME
接
口逻辑。
VME
接口逻辑主要包括读写控制逻辑、总线定时逻辑、中断管理逻辑和系统
时钟驱动逻辑等。由于
RK3399
处理器内部没有
VME
总线控制器,所以将
RK3399
上的
PCIE
接口连接到
FPGA
上,
RK3399
通过
PCIE
总线对
FPGA
设备进行控制,
从而实现对
VME
总线的控制。由于
FPGA
的
IO
电压为
3.3V
,而
VME
总线信号
电平为
5V
,因而还需要通过驱动电路进行电平转换。
2.2.3
控制器接口方案
VME
总线控制器需要提供
HDMI
视频、以太网、
USB
、串口等外部接口。
RK3399
内部集成多种外设控制器,如
UART
控制器,
GMAC
控制器、
HDMI
控制
器、
USB
控制器和
PCIE 控制器等,使用这些控制器极大的方便了接口设计。控制
器外设接口方案如图
2-2
。
RK3399
芯片内有一个
GMAC
控制器,用来连接芯片外部的以太网
PHY
,实
现网络传输功能。
RK3399
处理器的
GMAC
支持
RMII
和
RGMII
接口,其中,
RMII
接口支持
10/100Mbps
的速率传输,
RGMII
接口
10/100/1000Mbps
速率传输。
考虑到设计的方便性以及国产化的需求,本设计采用裕太微电子的以太网
PHY
芯片
YT8511H
,裕太微电子定位于一家具有完全自主知识产权的以太网
PHY
芯片供应商,主要服务有线通信领域包括数通、安防、车载、工业和特种行业等,
产品主要应用于汽车、消费、工业等行业的以太网
PHY
芯片。
YT8511H
是一款三
速
10/100/1000BASE-T
千兆以太网物理层收发器(
PHY
),完全符合
RGMII
接口
规范,从而与标准的以太网媒体访问控制器(
MAC
)和交换控制器兼容,它使用
标准的数字
CMOS
工艺制造,非常适合广泛的工业应用。
RK3399
的视频接口主要有
eDP
、
MIPI
和
HDMI
三种。
eDP
接口是一种基于
DisplayPort
架构和协议的内置视频接口,主要适用于平板电脑和笔记本等;
HDMI
是一种外置视频接口,可以同时传输视频和音频,常用于外接显示器,
HDMI
接口
体积较小、传输速度快;
MIPI DSI
接口主要用于连接
MIPI
显示屏。
考虑到
HDMI
接口使用较为广泛,而且设计起来比较简单,本设计使用
HDMI
视频接口。
RK3399
的
HDMI
接口兼容
HDMI 1.4a
和
2.0a
协议,由一个
HMDI
发
射控制器和一个发射器
PHY
组成。需要注意的是,
RK3399
的
I2C
总线不支持
5V
电平,因此需要通过电平转换电路将
I2C
总线的电平转为
5V
,再接到
HDMI
连接
器上。
2.3
软件总体方案
软件程序是整个嵌入式控制器的灵魂,它在整个嵌入式系统中发挥着极其重
要的作用。
VME
控制器的软件系统主要包括引导程序移植、嵌入式
Linux
内核裁
剪和驱动程序设计三大部分。软件方案的设计框图见下图 2-3。
嵌入式
Linux
操作系统处于整个软件系统的底层,它可以屏蔽底层硬件的差
异,为应用程序的开发提供统一且可靠的平台。
引导程序
Bootloader
是系统上电之后运行的第一段程序,操作系统运行之前,
需要通过引导程序进行引导。引导程序主要完成对
CPU
以及目标电路板的初始化,
包括串口初始化、
DDR
初始化、系统时钟及电源初始化等等。完成上述的初始化
之后,将外部
eMMC Flash
中的程序代码搬运到
DDR
内存中,之后即可以启动操
作系统的运行。
驱动程序主要实现对具体设备的控制,涉及到对底层寄存器的读写等操作。应
用程序一般不能直接对硬件设备进行操作,需要通过驱动程序提供的函数接口来
访问设备。所以,驱动程序的作用就是向应用程序提供合适的编程接口,为应用程
序屏蔽底层的具体硬件操作
[33]
。
2.3.1
引导程序和操作系统方案
嵌入式控制器的系统移植主要包括引导程序移植和
Linux
系统移植两个部分。
引导程序移植是为
Linux
系统移植做铺垫准备,两者不可缺一。接下来介绍引导程
序和
Linux
系统移植的方案。
针对不同的
CPU
架构和不同的操作系统,有多种类型的引导程序。针对
ARM
架构的引导程序有
vivi
、
ARMboot
等,针对
PowerPC
架构的有
ppcboot
,还有支持
多种架构的
U-Boot
。还有专门启动
WinCE
系统的
eboot
、基于
eCos
系统的
Redboot
等等。
U-Boot
引导程序是对大众开源的,它支持
ARM
、
X86
、
MIPS
、
RISC-V
等架
构的处理器,支持
Linux
、
VxWorks
、
Android
等多种操作系统。
U-Boot
使用非常
广泛,并且它非常适用于
ARM
处理器
[34]
,所以本次设计使用通用的
U-Boot
作为
引导程序,从而减小开发难度。
在嵌入式领域中比较流行的操作系统主要有
winCE
、
Linux
和
VxWorks
。其中,
VxWorks
系统具有较高的可靠性和实时性,主要用于军事、航空、航天、飞机导航
等领域
[35] [36]
。
winCE
即
Windows CE
,是微软开发的基于掌上电脑等设备的操作系
统。由于本课题对实时性要求不高,考虑到
Linux
系统免费开源且功能强大,所以
选择
Linux
系统进行开发。
Linux
系统具有诸多优势。
Linux
系统内核精简,并且稳定性高;由于源码是
开放的,所以得到许多开发者的支持;
Linux
系统的移植性较好,并且提供图形化
配置工具;
Linux
支持多种
CPU
结构,几乎所有的主流芯片都支持
[37]
。
Linux
系统移植主要包括内核移植和根文件系统制作。内核移植需要根据硬件
设备信息修改设备树,并根据实际需求对驱动程序进行删减和增加,删减掉不需要
的驱动,提高启动速度
[38]
。
2.3.2
设备驱动程序方案
Linux
系统的逻辑结构可划分为四层,包括应用层、操作系统层、驱动层和硬
件层。其中,驱动程序属于驱动层,是应用程序、操作系统和底层硬件之间的桥梁。
驱动程序为上层程序屏蔽掉不同设备的差异性,使得应用程序可以通过相应的函
数接口来控制硬件设备
[39]
。
此外,
Linux
系统将程序的运行分为内核态和用户态,或者叫内核空间和用户
空间。内核态的程序权限较高,系统和驱动运行在内核空间,可以控制内存映射、
访问外设空间、控制中断等。用户态为应用程序的活动空间,运行在用户态的程序
权限相对较低,只能执行应用程序。
VME
控制器需要提供一些基本的功能接口,从而实现与外部设备之间的交互。
一些设计简单且比较通用的外设如
USB
、
UART
、
HDMI
等接口已经有通用的驱动
程序不用修改即可使用。但是特定的设备如
PCIE
、以太网设备需要自己开发对应
的驱动程序。
本课题需要自行开发
PCIE
设备驱动程序,以完成对
PCIE
设备的访问和控制。
PCIE
设备驱动首先需要注册设备驱动,并根据设备
ID
等信息进行匹配,之后进
行初始化等工作,申请
IO
和内存资源并完成
BAR
地址映射。之后利用
file_operations
结构体中的读写操作等函数,实现对
PCIE
设备的访问和控制。
PCIE
设备驱动需要实现对
PCIE
设备的
BAR0
和
BAR1
存储空间的读写访问,
进而实现对
VME
总线的读写操作。
PCIE
驱动还需要使能
PCIE MSI
中断,并将接
收到的中断以信号的方式传递到应用程序。
信迈提供RK3399+FPGA解决方案。