1 Star 0 Fork 7

吴凯涛 / d2000-vxworks-6.9.4

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

飞腾腾锐D2000八核开发板描述文档

1.简介

腾锐D2000/8 是一款面向桌面应用的高性能通用8 核处理器。每2 个核构成1 个处理器核簇(Cluster),并共享L2 Cache。主要技术特征如下:

  • 兼容ARM v8 64 位指令系统,兼容32 位指令
  • 支持单精度、双精度浮点运算指令
  • 支持ASIMD 处理指令
  • L2 Cache:每个Cluster内有2MB,共8MB;腾锐D2000/4网安版和腾锐D2000/4工业级网安版的L2 Cache共4MB
  • L3 Cache:分为8个Bank,共4MB
  • 集成2 个DDR4-3200控制器
  • 集成34 Lanes PCIE3.0 接口:2 个X16(每个可拆分成2 个X8),2 个X1
  • 集成2 个千兆Ethernet接口(RGMII),支持10/100/1000Mbps 自适应
  • 集成1 个SD 卡控制器,兼容SD 2.0 规范
  • 集成4 个UART,32 个GPIO,4 个I2C,1 个QSPI,2 个通用SPI,3 个CAN,2 个WDT,16 个外部中断
  • 集成2 个温度传感器
  • 集成128KB On Chip Memory

2.VxWorks编译环境搭建

2.1. 更新源码

把本项目的源码按对应位置复制、替换到VxWorks6.9开发环境。(WIND_HOME代表安装根目录)
这些源码分两部分:BSP和库
BSP的路径是:<WIND_HOME>\vxworks-6.9\target\config<BSP-source>
库的根路径是:<WIND_HOME>\vxworks-6.9\target\src\
如果只更新BSP,可以直接用Workbench编译环境进行开发。
如果库的源文件有任何更新,则先编译库,再用Workbench开发。

2.2. 命令行编译库

库的运行模式有两种,SMP(Symmetrical Multi-Processing)和UP(Uni-Processing),简称多核和单核。
开发者首先确定用多核,还是单核模式,再做具体的步骤。
打开CMD命令窗口,设置开发环境:

cd <WIND_HOME>  
wrenv.exe -p vxworks-6.9  
cd <WIND_HOME>\vxworks-6.9\target\src    

(1)编译SMP库:

make CPU=ARMARCH7 TOOL=diab VXBUILD=SMP  

命令结束后,即完成<WIND_HOME>\vxworks-6.9\target\lib_smp\库目录下的文件更新。
(2)编译UP库:

make CPU=ARMARCH7 TOOL=diab   

命令结束后,即完成<WIND_HOME>\vxworks-6.9\target\lib\库目录下的文件更新。

补充说明:
(1)在src下执行make,是编译整个库,花费时间最长。如果只更新了一个子目录,可以 cd 到子目录里,再执行make命令,缩短编译时间。比如:

cd <WIND_HOME>\vxworks-6.9\target\src\arch\arm   
make CPU=ARMARCH7 TOOL=diab VXBUILD=SMP   

(2)清理某个库用clean目标,清理整个库用rclean目标,比如:

make CPU=ARMARCH7 TOOL=diab rclean  //清理整个UP库    
make CPU=ARMARCH7 TOOL=diab         //重新编译整个UP库    

2.3.图形化编译库

以上命令行编译库的方法,可以用Workbench工具的VxWorks Source Build(Kernel Library) Project菜单命令完全替代,简称VSB工程。
只是VSB工程不会修改系统默认库 <WIND_HOME>\vxworks-6.9\target\lib或lib_smp,而是在VSB工程目录下保存新的库文件。新建VxWorks Image Project(简称VIP工程)时,要基于此VSB。
推荐使用图形化编译。 如果修改了某个源码文件,为了节省编译时间,也可以用命令行编译到指定的VSB工程里,只需要指定VSB_DIR即可,例如:

cd <WIND_HOME>\vxworks-6.9\target\src\arch\arm 
make CPU=ARMARCH7 TOOL=diab VXBUILD=SMP  VSB_DIR=<WIND_HOME>\workspace\<VSB-project-dir>

3.VxWorks运行环境搭建

参考板使用uboot启动vxWorks操作系统。用bin格式的镜像,即默认文件名为vxWorks.bin启动操作系统镜像的方法不止一种,有网络、USB盘、SATA硬盘等方式加载,用户选择方便的一种即可。

3.1. 通过tftp网络加载镜像

Workbench集成开发环境编译后,默认生成 vxWorks 镜像文件,是ELF格式的。可以进一步指定生成vxWorks.bin文件镜像,这里称作bin格式。 一般地,这两种格式,uboot都是可以加载运行的。
加载的过程和方法都是一样的,区别仅仅是内存基地址不同。

(1)对于bin格式,取基地址 0x80100000
(2)对于ELF格式,取基地址 0x90100000

uboot命令行里,0x前缀可以省略。

3.1.1 PC端设置 TFTP 服务器

PC机和参考板通过网口相连。在PC机上启动TFTP服务器,以windows系统为例,直接双击<workbench安装目录>\vxworks-6.9\host\x86-win32\bin\Tftpd32.exe
只需要设置 Current Directory 指向vxWorks.bin(或vxWorks)文件所在的路径即可,无其他设置。

3.1.2 参考板设置uboot环境变量

参考板和PC机通过TTL电平的3线UART串口连接。在PC机上打开终端软件(比如超级终端、TeraTerm等),连接此串口,波特率设置为 115200,其他无需设置。上电,在终端软件中停止uboot的自动启动,在uboot提示符中,输入如下命令:

 setenv ethaddr 98:0e:24:00:11:22    
 setenv eth1addr 98:0e:24:00:11:23

 setenv ipaddr 192.168.3.119    
 setenv serverip 192.168.3.118    
 saveenv

3.1.3 下载和启动操作系统镜像

(1)bin格式镜像:
在uboot里执行命令:

tftpboot  0x80100000  vxWorks.bin    
bootvx32 0x80100000    

即可启动vxWorks系统

(2)ELF格式镜像:
在uboot里执行命令:

tftpboot  0x90100000  vxWorks    
bootvx32 0x90100000    

即可启动vxWorks系统

(以下命令相同,仅以bin格式为例。用ELF格式时,只需要替换基地址和文件名即可,其他部分相同。)

3.2. 通过文件系统加载镜像

3.2.1. USB盘加载

把vxWorks.bin文件提前拷贝到FAT32格式的USB盘中,再把此盘插入参考板的USB口,上电,执行uboot命令:

   usb xhci start
   fatload usb 0 0x80100000 vxWorks.bin
   bootvx32 0x80100000

3.2.2. FAT32硬盘加载

把vxWorks.bin文件提前拷贝到FAT32格式的硬盘中,再把此盘插入参考板的SATA口,上电,执行uboot命令:

   fatload scsi 0:1 0x80100000 vxWorks.bin
   bootvx32 0x80100000

3.2.3. EXT4硬盘加载

把vxWorks.bin文件提前拷贝到ext4格式的硬盘中,再把此盘插入参考板的SATA口,上电,执行uboot命令:

   ext4load scsi 0:1 0x80100000 vxWorks.bin  
   bootvx32 0x80100000

文件系统加载后,在vxWorks运行时,如果gmac网络不通,则仍然需要在uboot阶段提前设置一个有效合理的MAC地址:

   setenv ethaddr 98:0e:24:00:11:22
   setenv eth1addr 98:0e:24:00:11:23

3.3. 设置板载FLASH自动启动,避免人工干预

此项设置是把vxworks镜像保存到和UBOOT相同的NOR FLASH芯片里。此芯片一般32MB。目前uboot里的flash读写命令,最大支持16MB。
评估uboot固件一般4MB左右。以下命令例子,把前6MB给uboot,从6MB到16MB的空间给VxWorks镜像用。VxWorks是ELF格式的文件。操作命令如下:

tftpboot 0x90100000 vxWorks   网络下载到内存

flashe 0x600000 0xa00000     
flashw 0x90100000 0x600000 0xa00000 
cmp.b 0x600000  0x90100000 0xa00000 
cp.b  0x600000  0x90100000 0xa00000

setenv bootcmd "cp.b  0x600000  0x90100000 0xa00000; bootvx32 0x90100000"
saveenv

然后就可以下电、上电启动,自动引导系统。如果用vxWorks.bin文件,则把0x90100000改成0x80100000即可。

3.4. CPU ID映射

对于UP版本,只在一个核上运行操作系统,不涉及CPU ID映射。 只有SMP版本时,才需要映射。在sysLib.c里,使用数组cpuIndexMap[]进行物理ID号和逻辑ID号的转换。 物理ID号取自MPIDR(Multiprocessor Affinity Register)寄存器的低24位。 cpuIndexMap[0] 必须 为操作系统启动核(主核)的MPIDR,各个从核的物理ID依次填入cpuIndexMap[]数组后续项。该数组索引 就是逻辑ID。上层函数usrSmpInit唤醒每个逻辑核,就对应cpuIndexMap[]数组所配的每个实际物理核。

4.驱动描述

4.1. 参考板支持的硬件接口驱动列表:

Hardware Interface Controller Driver/Component Status Component
UART:0 PrimeCell PL011 vxbPrimeCellSio.c SUPPORTED DRV_SIO_PRIMECELL
UART:1 PrimeCell PL011 vxbPrimeCellSio.c SUPPORTED DRV_SIO_PRIMECELL
UART:2 PrimeCell PL011 vxbPrimeCellSio.c SUPPORTED DRV_SIO_PRIMECELL
UART:3 PrimeCell PL011 vxbPrimeCellSio.c SUPPORTED DRV_SIO_PRIMECELL
10/100/1000Mb-ETHERNET FT GAMC vxbFtGmacEnd.c SUPPORTED DRV_VXBEND_FTGMAC
TIMER generic timer vxbArmv7GenTimer.c SUPPORTED DRV_ARM_GEN_SYS_TIMER
TIMER auxiliary timer vxbArmv7AuxTimer.c SUPPORTED DRV_ARM_GEN_AUX_TIMER
PCIe FT pcie vxbFtPcie.c SUPPORTED DRV_PCIBUS_FT
USB D720201 XHCI SUPPORTED INCLUDE_USB_XHCI_HCD
SATA AHCI vxbAhciStorage.c SUPPORTED INCLUDE_DRV_STORAGE_AHCI
I2C FT I2C vxbFtI2c.c SUPPORTED DRV_FTI2C
RTC DS1339 vxbI2cRtc.c SUPPORTED INCLUDE_FT_RTC
CAN FT CAN vxbFtCan.c SUPPORTED DRV_FTCAN
SD Card FT SD vxbFtSdCtrl.c SUPPORTED INCLUDE_FT_SD
PHY YT8521 vxbYt8521Phy.c SUPPORTED INCLUDE_YT8521PHY
QSPI FT QSPI vxbFtQspi.c SUPPORTED DRV_FTQSPI
SP25FLASH FT QSPI vxbSp25SpiFlash.c SUPPORTED DRV_SPIFLASH_SP25
DisplayPort X100 vxbM6845Vga.c & lib SUPPORTED INCLUDE_PC_CONSOLE
EEPROM AT24C32 vxbI2cEeprom.c SUPPORTED DRV_I2C_EEPROM
GPIO FT_GPIO vxbFtGpio.c SUPPORTED DRV_FTGPIO

从飞腾官方网站 https://www.phytium.com.cn/ 可以下载编程手册 << 飞腾腾锐D2000软件编程手册.pdf >>, 用户需下载最新版。

4.2. 串口配置

四个 PrimeCell UART 串口,默认配置为

Baud Rate   : 115200
Data        : 8 bit
Parity      : None
Stop        : 1 bit
Flow Control: None

4.3. 网络和MAC地址

网口是集成的 SOC GMACs 10/100/1000 MAC 和 PHY。 MAC地址格式: 98:0e:24:xx:xx:xx. 其中前三个字节 98:0e:24 代表飞腾公司

`gmac0'   | - Ethernet
`gmac1'   | - Ethernet

vxWorks的ifconfig命令,不带参数时,可以查看网口信息。 配置IP地址时,可以用如下格式:

 -> ifconfig "gmac0 192.168.100.100 up"

4.4. 块设备文件系统

块设备 SD/USB/SATA 等设备,一般需要加载文件系统。 VxWorks 支持两种文件系统 dosFs 和 HRFS. 配置dosFs时,可能需要以下常用组件:

#define INCLUDE_DOSFS
#define INCLUDE_DOSFS_MAIN
#define INCLUDE_DOSFS_CHKDSK
#define INCLUDE_DOSFS_FMT
#define INCLUDE_DOSFS_FAT
#define INCLUDE_DOSFS_SHOW
#define INCLUDE_DOSFS_DIR_VFAT
#define INCLUDE_DOSFS_DIR_FIXED
#define INCLUDE_FS_MONITOR
#define INCLUDE_FS_EVENT_UTIL
#define INCLUDE_ERF
#define INCLUDE_XBD
#define INCLUDE_XBD_BLKDEV
#define INCLUDE_XBD_TRANS
#define INCLUDE_DEVICE_MANAGER
#define INCLUDE_XBD_BLK_DEV
#define INCLUDE_XBD_PART_LIB
#define INCLUDE_DISK_UTIL

格式化命令:

dosFsVolFormat ("NameOfTheBlockDevice", 0x20, 0);    /@ FAT32 format @/

或者

dosFsVolFormat ("NameOfTheBlockDevice", 0x10, 0);    /@ FAT16 format @/

格式化后,可以用文件系统的相关命令,比如

copy ("vxWorks", "NameOfTheBlockDevice/vxWorks");
pwd
cd("/ata0:2")
ls
ll 
dosFsShow("NameOfTheBlockDevice", level)

devs 命令可以查看vxWorks系统添加的设备列表。比如:

/tyCo/0
host:
/ata0:1
/bd0

4.5. CPU 个数

宏 VX_SMP_NUM_CPUS 的值是SMP启动的核的个数。默认取最大值8,即所有核都启动。 可以在Workbench组件窗口中,修改此宏的值,选择启动的核数。

4.6. I2C驱动组件配置及使用方法

基本组件配置:

#define INCLUDE_FT_I2C
#define INCLUDE_I2C_BUS

可以在hwconf.c中配置I2C控制器的总线速率以及中断模式。
例如,将I2C控制器0配置为总线速率为400kHz的轮询模式:

/@ hwconf.c @/
...
struct hcfResource i2cDev0Resources[] = {
... 
{ "busSpeed",   HCF_RES_INT,    {(void *)400000}},
{ "polling",    HCF_RES_INT,    {(void *)TRUE}},
...
};
... 

如果访问I2C的RTC设备,比如DS1339器件,则添加组件

#define INCLUDE_TIMER_RTC
#define DRV_I2C_RTC   

并且在hwconf.c的I2C设备列表中添加DS1339设备:

/@ hwconf.c @/
...
LOCAL struct i2cDevInputs i2cDev1Input[] = {
   /* Name */    /* Addr (7-bit) */   /* flag */
...
#ifdef DRV_I2C_RTC	
	{ "rtc_ds1339",    (0xD0>>1),    0 },
#endif
...
};
... 

访问RTC设备的用户接口主要有:

STATUS vxbRtcGet (struct tm * rtcTime); /*读取RTC时间。*/
STATUS vxbRtcSet (struct tm * rtcTime); /*设置RTC时间。*/

(系统中如果存在多个RTC设备,软件会自动选用最合适的一个)。

如果访问I2C的EEPROM设备,比如at24c32器件,则添加组件

# define DRV_I2C_EEPROM
# define INCLUDE_EEPROMDRV  

并且在hwconf.c的I2C设备列表中添加at24c32设备:

/@ hwconf.c @/
...
LOCAL struct i2cDevInputs i2cDev1Input[] = {
      /* Name */      /* Addr (7-bit) */   /* flag */
...
#ifdef DRV_I2C_EEPROM	
	{ "eeprom_at24c32",    (0x57),    I2C_WORDADDR },
#endif
...
};
... 

这样就在文件系统里添加了一个eeprom设备, 可以通过devs命令查看到eeprom设备:

 -> devs
 drv name
 ...
   7 /eeprom/0
 ...

可以通过标准的文件系统接口open,read,write,close等操作来访问EERROM。

4.7. CAN组件配置

基本组件配置:

#define DRV_FTCAN

设置波特率的函数接口为:ftCanSetBitrate(),可以运行时修改波特率。
发包函数接口为ftCanSend(),在参数中设置帧格式的各类参数。
收包是被动且异步的,通过ftCanRecvCallback()挂接回调函数实现。如果不设置,则默认打印shell显示接收信息。

4.8. SD卡组件配置

基本组件配置:

#define INCLUDE_FT_SD
#define RV_SDSTORAGE_CARD

仅支持FAT32文件系统 ,devs命令显示的默认设备名称 /sd0:0

4.9. QSPI组件配置及使用方法

基本组件配置:

#define DRV_FTQSPI
#define INCLUDE_SPI_BUS

如果访问QSPI的FLASH设备,比如sp25系列器件,则添加组件

#define DRV_SPIFLASH_SP25

并且在hwconf.c的SPI设备列表中添加sp25器件:

/@ hwconf.c @/
...
LOCAL struct vxbSpiDevInfo spiDevTbl[] = {
      /* name                cs      width   freq        mode */
...
#ifdef DRV_SPIFLASH_SP25	
	{ SPI_FLASH_DEVICE_NAME,  0,       8,   30000000,      1},
#endif
...
};
... 

可以通过TFFS文件系统访问SPIFLASH,具体操作参考下面的"4.10. TFFS组件配置及使用方法"一节

4.10. TFFS组件配置及使用方法

若要支持TFFS文件系统,需要包含TFFS及dosFs文件系统组件。
dosFs文件系统相关组件参考上面的“4.4.块设备文件系统”一节;
TFFS文件系统相关组件如下:

#define INCLUDE_TFFS
#define INCLUDE_TFFS_MOUNT
#define INCLUDE_TFFS_SHOW
#define INCLUDE_TFFS_STUB_VXBFLASH

第一次使用TFFS文件系统时,需要格式化FLASH,并且格式化DOS分区:
在shell里执行:

 -> sysTffsFormat 0              对FLASH格式化
 -> usrTffsConfig 0,0,"/tffs0"   创建设备
 -> devs                         显示设备/tffs0
 -> dosFsVolFormat("/tffs0",0,0) 分区格式化为DOS

第二次上电以后,无需格式化,只需要创建设备就可以了,在shell里执行创建设备后,就可以用了:

 -> usrTffsConfig 0,0,"/tffs0"   

使用方法举例:

 -> cd "/tffs0"
 -> fd=open("test.txt",0x202,0777)
 -> write(fd, "hello world\r\n",13)
 -> close (fd)
 -> copy "test.txt"

4.11. PC CONSOLE组件配置

基本组件配置:

#define INCLUDE_PC_CONSOLE
#define INCLUDE_USB_GEN2_KEYBOARD_INIT
#define INCLUDE_USB_GEN2_KEYBOARD_SHELL_ATTACH

PC CONSOLE组件可以在显示器屏幕上显示控制台信息,这需要X100套片硬件的支持。控制台需要USB键盘作为输入设备,挂载到vxWorks系统的shell任务上。

4.12. GPIO组件配置及使用方法

基本组件配置:

#define DRV_FTGPIO

在hwconf.c的GPIO管脚工作模式列表中设置各个管脚的默认工作模式:

/@ hwconf.c @/
...
/*This table is used to set the default pin mode of portA*/
/* 0:GPIO_MODE_NOT_USED  1:GPIO_MODE_IN 
   2:GPIO_MODE_OUT       3:GPIO_MODE_INT*/

LOCAL UINT8 gpio0PortAModeTable[] = { 
/*portA-pinX:  0  1  2  3  4  5  6  7  */		
               3, 2, 1, 0, 0, 0, 0, 0       
};
... 

5. 参考资源

ARM Architecture Reference Manual

Wind River Workbench User's Guide

VxWorks Kernel Programmer's Guide

VxWorks Architecture Supplement

飞腾腾锐D2000软件编程手册.pdf

6. 已知问题列表

6.1. CAN ID过滤帧问题

现象:设置ID过滤寄存器之后,一旦收到ID不匹配的帧,将会导致随后第一个ID匹配的帧在硬件FIFO里是内容错误的,需要丢弃此帧。第二个ID匹配帧以后,就能正常接收了。

建议:不设置硬件过滤,所有帧全收,再用软件实现ID过滤功能。

6.2. Workbench WDB调试连接SMP内核问题

现象:调试连接失败
PC机上workbench工具在建立连接过程中,默认会检查PC机上程序映像文件,和目标板上正在运行的 文件是否一致。这通过检查文件checksum实现。由于SMP版本映像文件上电启动时,动态修改了代码段内容, 这会导致检查失败,WDB报错退出。(UP版本映像文件无此问题)

建议:为了使用WDB,可以在WDB连接选项中禁用此校验。只要用户保证PC机上WDB使用的映像文件,和目标板上正在运行的程序,是同一个文件,则不影响正常调试。

具体选项为: Target Server Options >> Kernel image >> Bypass checksum comparison 打上勾选中。

如下图红圈所示: markdown picture

6.3. Workbench WDB连接IP地址问题

现象:系统启动后,用ifconfig "网口 IP地址" 命令修改了IP地址后,WDB连接失败。

建议:由于WDB组件初始化时就要获取IP地址,因此不要启动后再修改WDB用的IP地址。
在组件配置窗口里,修改 DEFAULT_BOOT_LINE 字符串里的IP地址,然后编译镜像。

6.4. SATA硬盘驱动vxbAhciStorage.c 文件版本问题

在vxWorks 6.9.4.x 的不同小版本之间,vxbAhciStorage.c这个文件的代码差异还是比较多的。最合理的方法是从对应版本的<WIND_HOME>\vxworks-6.9\target\src\hwif\storage\目录下取vxbAhciStorage.c这个文件放到BSP目录下,然后在vxbAhciInstInit2()函数的最后,添加以下几行代码:

LOCAL void vxbAhciInstInit2
(
VXB_DEVICE_ID pDev
)
{
... 省略 ...
    if (pDev->busID != VXB_BUSID_PCI)
    pAhciDrvCtrl->regHandle = (void *)AHCI_REG_HANDLE_SWAP((ULONG)pAhciDrvCtrl->regHandle);

    /*----------------------------- 新加以下几行----------------------------------------*/
    /* reset AHCI controller. Here we must reset AHCI as soon as early when using PCI legacy interrupt!
    *  Because both Net Card and SATA Card use int-pin 1, with the same int line 83 for FT1500 board.
    *  When Net Card init, there are too many SATA interrupts to boot board if the AHCI not reset here.
    */

    (void) CTRL_REG_READ(pAhciDrvCtrl, AHCI_GHC);
    CTRL_REG_WRITE(pAhciDrvCtrl, AHCI_GHC, AHCI_GHC_HR);
/*------------------------------------------------------------------------------------*/

}

由于本BSP从6.9.4.8支持,基于此版本的vxbAhciStorage.c 文件作为一个示例。如果用户版本更新,则取更新的版本作为基线。
旧版本识别SATA的速度比较慢一些,新版本更新ahciDrv()函数会加快识别速度。

空文件

简介

本项目是vxWorks6.9.4版本的D2000参考板BSP源码。 可依此创建操作系统映像工程,编译生成vxWorks.bin,32位SMP模式。详细启动步骤请参考target.ref文件。 注意:只用此BSP,不修改target/src/arch/arm 库源码的时候,只能启动两个核。需要修改20bsp.cdf文件中的VX_SMP_NUM_CPUS值,DEFAULT值8改为2。 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/kaitao-wu/d2000-vxworks-6.9.4.git
git@gitee.com:kaitao-wu/d2000-vxworks-6.9.4.git
kaitao-wu
d2000-vxworks-6.9.4
d2000-vxworks-6.9.4
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891