vxworks7.0 qspi文件系统挂接问题

上一章我们谈了谈qspi驱动程序的挂接流程,下面再谈谈qspi文件系统的挂接及驱动调试,我们知道qspi驱动最终为三个函数实现:

1、vxbSpiFlashRead,2、vxbSpiFlashWrite,3、vxbSpiFlashErase,分别对应flash读,写和扇区擦除命令,对于zedboard开发板而言,编写测试代码测试驱动程序,代码如下


void s25Fl256sReadDataTest(int secAddr)
{
	UINT8   cmd = SPI_RDSR_CMD;
	VXB_DEV_ID  pFlash;
	SPI_FLASH_DEV *pDrvCtrl;
	UINT8   tmpBuf[256];
	int i = 0;
	
	memset(tmpBuf, 0,sizeof(tmpBuf));
	pFlash = findVxbDevNodetId(&vxbRoot,SPI_FLASH_NAME);
	pDrvCtrl = (SPI_FLASH_DEV *)vxbDevSoftcGet(pFlash);
	spiFlashDataRead(pDrvCtrl,secAddr,sizeof(tmpBuf),tmpBuf);
	for(i = 0; i < sizeof(tmpBuf);i++)
	{
		if(i%16 == 0)
			printf("\n");
		printf("%02x ",tmpBuf[i]);
		
	}
}

写flash测试代码:

void s25Fl256sWriteDataTest(int secAddr)
{
	UINT8   cmd = SPI_RDSR_CMD;
	UINT8   jedecId[2];
	VXB_DEV_ID  pFlash;
	SPI_FLASH_DEV *pDrvCtrl;
	UINT8   tmpBuf[256];
	/*页大小为256个字节,按页大小写测试*/
	int i = 0;
	
	for(i = 0; i < sizeof(tmpBuf);i++)
		tmpBuf[i] = i;
	memset(jedecId, 0,sizeof(jedecId));
	pFlash = findVxbDevNodetId(&vxbRoot,SPI_FLASH_NAME);
	pDrvCtrl = (SPI_FLASH_DEV *)vxbDevSoftcGet(pFlash);

	spiFlashDataWrite(pDrvCtrl,secAddr,sizeof(tmpBuf),tmpBuf);
	
}

flash扇区擦除代码

void s25Fl256sSectorEraseTest(int startAddr,int numOfErasableBlocks)
{
	VXB_DEV_ID	pFlash;
	SPI_FLASH_DEV *pDrvCtrl;

	pFlash = findVxbDevNodetId(&vxbRoot,SPI_FLASH_NAME);
	pDrvCtrl = (SPI_FLASH_DEV *)vxbDevSoftcGet(pFlash);
	if(spiFlashSectorErase(pDrvCtrl,startAddr,numOfErasableBlocks)==ERROR)
		printf("sector  erase failed.......\n");
}

经测试发现flash可以正常芯片擦除,正常写,但是读数据总是少几个字节,而且不能扇区擦除,需要更改为3字节地址读写,设备树配置如下:

  qspi0: qspi@e000d000 
            {
            #address-cells = <1>;
            #size-cells = <0>;
            compatible = "xlnx,zynq7k-qspi";
            reg = <0xE000D000 0x100>,
                  <0xF8000000 0x800>;
            interrupts = <51>; 
            interrupt-parent = <&intc>;
               spiflash@0
		        {
			        compatible = "spflspilash";
			        reg = <0>;
			        data-lines = <4>;
			        chip-number = <1>;
			        addr-mode = <1>;
			        spi-max-frequency = <100000000>;
		        };
            };

这样就可以正常擦除扇区了,但是读数据总时少几个字节,查看代码需要修改spiAttach函数,

    pDrvCtrl->readCmd   = SPI_FAST_READ_CMD;
        pDrvCtrl->readNbits = 1;
        pDrvCtrl->readDummy = 8;

        if ((pDrvCtrl->hd.chipNum == 1) ||
            ((pDrvCtrl->hd.mode & SPI_PARALLEL) != 0))
            {
            switch (pDrvCtrl->hd.dataLines)
                {
                case 2:
                    if (pDrvCtrl->hd.mode & SPI_READ_11X)
                        {
                        pDrvCtrl->readCmd   = SPI_DUALIO_RD_CMD;
                        pDrvCtrl->readDummy = 4;
                        }
                    else
                        {
                        pDrvCtrl->readCmd   = SPI_DUALIO_HPRD_CMD;
                        pDrvCtrl->readDummy = 8;
                        }
                    pDrvCtrl->readNbits = 2;
                    break;
                case 4:
                    if (pDrvCtrl->hd.mode & SPI_READ_11X)
                        {
                        pDrvCtrl->readCmd   = SPI_QUADIO_RD_CMD;
                        pDrvCtrl->readDummy = 2;
                        }
                    else
                        {
                        pDrvCtrl->readDummy = 6;
                        pDrvCtrl->readCmd   = SPI_QUADIO_HPRD_CMD;
                        }
                    pDrvCtrl->readNbits = 4;
                    break;
                default:
                    break;
                }
            }

更改  pDrvCtrl->readDummy = 6;

测试发现可以正常读写,扇区擦除了,然后挂接文件系统,sysTffsFormat 0   usrTffsConfig 0,0,"/tffs0"

然后DEVS查看设备,/tffs0出现在设备列表中,最后格式化成你自己想用的文件系统

至此,qspi文件系统挂接正常,文件传输正常

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VxWorks 7.0是一种实时操作系统,用于嵌入式系统开发。移植VxWorks 7.0系统需要进行以下几个步骤。 首先,了解目标硬件平台的特性和要求。了解处理器类型、主频、内存大小等硬件相关信息,以便进行正确的系统移植。 其次,准备适用于目标硬件平台的系统镜像文件。根据硬件平台的要求,选择适当的编译器和工具链,并设置好相关的环境变量。使用VxWorks 7.0提供的交叉编译工具,将操作系统的源代码编译成可执行的二进制文件。 然后,根据目标硬件平台的启动方式,进行系统启动的配置。配置引导程序、启动参数以及设备驱动等相关设置,确保系统能够正确地加载和运行。 接下来,进行硬件驱动的移植。根据硬件平台的特性,移植或编写相应的设备驱动程序,以便操作系统可以正确地与外设进行通信。这包括控制设备的初始化、读写操作以及中断处理等。 最后,进行系统测试和调试。在完成移植后,需要进行全面的功能测试和性能测试,确保系统在目标硬件平台上运行稳定且符合预期的性能要求。在测试和调试过程中,需要使用调试工具和技术,以便定位和解决各种问题。 总之,VxWorks 7.0系统移植是一个需要具备嵌入式系统开发和硬件知识的复杂任务。通过深入了解目标硬件平台的特性和要求,并进行适当的配置、编译和测试工作,可以成功地进行系统移植,并确保系统在新的硬件平台上正常运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值