# FT2004-VxWorks-6.9.4 **Repository Path**: MrChaosCodecloud/ft2004-vxworks-6.9.4 ## Basic Information - **Project Name**: FT2004-VxWorks-6.9.4 - **Description**: 本项目是vxWorks6.9.4版本的 FT-2000/4 参考板BSP源码。 可依此创建操作系统映像工程,编译生成vxWorks.bin,32位SMP模式。详细启动步骤请参考target.ref文件。 注意:只用此BSP,不修改target/src/arch/arm 库源码的时候,只能启动两个核。需要修改20bsp.cdf文件中的VX_SMP_NUM_CPUS值,DEFAULT值4改为2。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 7 - **Created**: 2022-08-25 - **Last Updated**: 2022-08-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 飞腾2000四核开发板描述文档 ## 1.简介 FT-2000/4 是一款面向桌面应用的高性能通用4 核处理器。每2 个核构成1个处理器核簇(Cluster),并共享L2 Cache。主要技术特征如下: - 兼容ARM v8 64 位指令系统,兼容32 位指令 - 支持单精度、双精度浮点运算指令 - 支持ASIMD 处理指令 - 集成2 个DDR4 通道,可对DDR 存储数据进行实时加密 - 集成34 Lane PCIE3.0 接口:2 个X16(每个可拆分成2 个X8),2 个X1 - 集成2 个GMAC,RGMII 接口,支持10/100/1000 自适应 - 集成1 个SD 卡控制器,兼容SD 2.0 规范 - 集成1 个HDAudio,支持音频输出,可同时支持最多4 个Codec - 集成SM2、SM3、SM4模块 - 集成4 个UART,1 个LPC,32 个GPIO,4 个I2C,1 个QSPI,2 个通用SPI,2 个WDT,16 个外部中断(和GPIO 共用IO) - 集成温度传感器 ## 2.VxWorks编译环境搭建 ### 2.1. 更新源码 把本项目的源码按对应位置复制、替换到VxWorks6.9开发环境。(WIND-HOME代表安装根目录) 这些源码分两部分:BSP和库 BSP的路径是:\vxworks-6.9\target\config\ 库的根路径是:\vxworks-6.9\target\src\ 如果只更新BSP,可以直接用Workbench编译环境进行开发。 如果库的源文件有任何更新,则先编译库,再用Workbench开发。 ### 2.2. 命令行编译库 库的运行模式有两种,SMP(Symmetrical Multi-Processing)和UP(Uni-Processing),简称多核和单核。 开发者首先确定用多核,还是单核模式,再做具体的步骤。 打开CMD命令窗口,设置开发环境: cd wrenv.exe -p vxworks-6.9 cd \vxworks-6.9\target\src (1)编译SMP库: make CPU=ARMARCH7 TOOL=diab VXBUILD=SMP 命令结束后,即完成\vxworks-6.9\target\lib_smp\库目录下的文件更新。 (2)编译UP库: make CPU=ARMARCH7 TOOL=diab 命令结束后,即完成\vxworks-6.9\target\lib\库目录下的文件更新。 补充说明: (1)在src下执行make,是编译整个库,花费时间最长。如果只更新了一个子目录,可以 cd 到子目录里,再执行make命令,缩短编译时间。比如: cd \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工程不会修改系统默认库 \vxworks-6.9\target\lib或lib_smp,而是在VSB工程目录下保存新的库文件。新建VxWorks Image Project(简称VIP工程)时,要基于此VSB。 推荐使用图形化编译。 ## 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系统为例,直接双击\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即可。 ## 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/](https://www.phytium.com.cn/) 可以下载编程手册 << FT-2000/4 软件编程手册-V1.4.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 devs 命令可以查看vxWorks系统添加的设备列表。比如: /tyCo/0 host: /ata0:1 /bd0 ### 4.5. CPU 个数 宏 VX_SMP_NUM_CPUS 的值是SMP启动的核的个数。默认取最大值4,即所有核都启动。 可以在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 tb FT-2000/4 软件编程手册-V1.4.pdf # 6. 已知问题列表 ## 6.1. CAN ID过滤帧问题 现象:设置ID过滤寄存器之后,一旦收到ID不匹配的帧,将会导致随后第一个ID匹配的帧在硬件FIFO里是内容错误的,需要丢弃此帧。第二个ID匹配帧以后,就能正常接收了。 建议:不设置硬件过滤,所有帧全收,再用软件实现ID过滤功能。 ## 6.2. Workbench WDB调试连接SMP内核问题 现象:调试连接失败 由于workbench工具在建立连接过程中,会检查程序映像是否正确。由于SMP版本内核启动时, 动态修改了代码段内容,导致检查失败。 建议:根据此特点,在连接选项中禁用了此校验过程,只要用户保证映像正确,则不影响正常调试。 ## 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这个文件的代码差异还是比较多的。最合理的方法是从对应版本的\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()函数会加快识别速度。