精华内容
下载资源
问答
  • ZYNQNAND flash启动应用笔记

    千次阅读 2019-05-17 17:23:41
    本文档主要用于ZYNQNAND flash启动说明,鉴于网上此类型资料较少,特作此说明。 至于zynq 的两步启动操作本文不在此说明详细可以阅读官方的相关文档和其余的网上的资料 工作主要分为两部分,一部分为在vivado...

    本文档主要用于ZYNQ从NAND flash启动说明,鉴于网上此类型资料较少,特作此说明。

    至于zynq 的两步启动操作本文不在此说明详细可以阅读官方的相关文档和其余的网上的资料

     

    工作主要分为两部分,一部分为在vivado部分的工作和SDK部分的工作,vivado主要是用来生成SDK工程需要使用的platform和FPGA的bit文件

    SDK主要用来生成FSBL的.elf的工程,和生成需要下载进在FLASH的boot.bin 文件。

    一。bin文件生成和FLASH下载

    1. 添加zynq的IPcore 生成platform和bit文件

    通过点击creat block design弹出对话框之后,然后填入design name和文件夹位置,design name将会是后来的生成的platform的名称,

     

    点击ok之后会显示如下的界面,

    然后通过点加号加入zynq7的Ipcore

    具体如下两图所示

    通过点击ipcore的图形回弹出对话框来对ip进行设置,具体界面如下

    此处根据具体的系统在arm侧的管脚情况来进行设置,此处主要完成对于管脚的一个映射以及bank电压的选择,注意此处的电压需要与原理图的管脚电压选择相同,由于本说明是针对NANDflash启动的,此处最主要的是对于NANDflash的选择, 其余可以根据实际情况进行选择,当然也可不选,

     

    接下来是对于时钟的设置,系统默认的时钟是33M时钟,由于本系统采用的是相同的时钟系统硬件时钟, 因此此处不需要修改,但是如果不是的话那可能需要变更部分的设置,另外由于系统只是启动FPGA没有ARM侧的代码因此需要将FCLK_CLK0的勾去掉

    此外如果不需要通过FPGA部分传递时钟过来的话则还需要在PS-PL configuration里面将M AXI GP0 interface 的勾去掉,以及FCLK_RESET0_N

    具体如图所示:

    另外就是DDR的选择,DDR对于NAND Flash是必须的,否则在SDK操作的时候会报错,无法进行flash的烧写工作。因为ARM不能直接对NAND flash直接一个地址一个地址地进行读写,只能整块整块地进行读写操作,因此如果要从NANDflash 启动则需要将flash中的bin文件先用DDR来读取,然后再来进行bin文件操作,此处的DDR操作需要注意的主要有两点,一个首先要勾选DDR,其次是需要勾选板卡所选的器件,另外还有总线位宽等,具体情况根据板卡的实际情况来进行选择。

     

    对于NAND flah启动还需要设置的另一个很重要的地方就是 SMC timing calculation,此处是NAND flash对具体的的读写时序调整参数,主要是调整读写的延迟时间,这里需要根据flash的数据手册来进行设置,手册给定的是最小的时延参数,此处应当设置的比手册中的大一些,另外就是此处的时延的依据应当是CS0 cycle 这才是关键,此参数是根据SMC 时钟频率和CS0 时延计算出来的,本系统使用的是镁光的MT29f2g08abbeahc的nand flash,具体设置成功的参数如下所示

    以下两表是手册中的具体时间参数

     

    设置完成后点击ok确认然后再点击图中的run block automation,此步主要是为了生成相应的端口

    此处的步骤主要是用来生成如图所示的interface port ,如果想要再次修改IPcore,想要添加部分的port可以通过右键该端口点击creat interface port

     

     

    此后再需要做的就是两步就是 creat output product 和creat HDL wrapper

    具体操作如图所示

    generate output product 会生成

    creat HDL wrapper会生成顶层的文件,此时需要将原先的顶层模块添加进生成的模块内部。

     

     

    然后保存生成bit文件

    然后再点击file -> export hardware 

     

     

    此时会在选定的文件下生成一个 hdf文件

    然后再点击launch SDK

    至此vivado部分的工作已经结束了

     

    然后需要在SDK内部建立一个FSBL的工程编译后生成elf文件,并用此文件与FPGA的bit文件生成bin文件,

     

    进入SDK之后新建Application project

    然后在新建窗口处填入project name 

    由于此处是从vivado直接launch的,所以hardware platform直接就已经导入过来了

     

    如果想要更换一个platform (也即arm侧的管脚约束配置等组成的一个硬件的配置文件)可以通过new然后将此hardware platform的hdf文件导入进来,然后project name就是此platform的名称。

     

    其余各项选默认之后,选择新建一个zynq FSBL的工程

    finish之后则对工程进行build 生成elf文件

    然后就生成bin文件就行

     

    下图主要是生成需要烧写进入flash的bin文件此处默认添加了FSBL的elf文件,和fpga的bit文件,注意此处elf需要在前,且其数据类型为bootloader,手动添加需要注意,而bit文件的文件类型为data类型。

     

    生成boot.bin文件之后就可以烧写flash了

    烧写的过程需要填入image file, 此文件在sdk的工程目录下,以及需要FSBL的elf文件,此文件是本工程的FSBL的生成的,然后就可以下载了,下载完成后Zynq的配置拨码开关需要从jtag模式变成nand模式就ok

     

    展开全文
  • 1.NAND FLASH1.flash型号MT29F4G082.FLASH基本信息位宽:8位容量大小:4Gb = 512MBBLOCK大小:128K +4kpage大小:2K + 64bytesblock数量:4096(2*2048)每个block的pages数量:128K/2K = 643.FLASH的物理组织这里...

    1.NAND FLASH

    1.flash型号

    MT29F4G08

    2.FLASH基本信息

    位宽:8位

    容量大小:4Gb = 512MB

    BLOCK大小:128K +4k

    page大小:2K + 64bytes

    block数量:4096(2*2048)

    每个block的pages数量:128K/2K = 64

    3.FLASH的物理组织

    这里plane的概念,应该是两个面,每一面有2048个block

    其于信息在图中标注清楚

    4.nand flash的寻址机制

    一般我们读写数据的时候,会给定一个读写数据的地址,这个地址一般是相对nand flash的基地址的偏移量,比如nand flash的基地址为0xe1000000.

    我现在要读取第1000个块的第32个page的第1024个字节处的地址,那么这个地址是:

    128k*1000+32*2k+1024 = 0x7d10400

    如何将这个地址传给flash呢,flash的地址和周期表如下:

    其中:

    CA代表page address也就是页内的偏移地址:地址线一共12位,其中A11比较特殊:

    每一页有(2K+64)=2112Byte,2112byte 需要12bit来表示,对于2112byte系列的NAND,这2112byte被分成1st half Page Register和2nd half Page Register,各自的访问由地址指针命令来选择,A[11:0]就是所谓的column address(列地址),在进行擦除操作时不需要它,因为以块为单位擦除。64个page需要6bit来表示,占用A[17:12],即该page在块内的相对地址,也就是确定位于哪一页。A11这一位地址被用来设置2048byte的1st half page还是2nd half page,0表示1st,1表示2nd。Block的地址是由A18以上的bit来表示,也就是确定位于哪一块。

    PA代表一个block内的页地址:地址线一共6位,就是64个pages

    BA代表device内的块地址:地址线一共12位,一共4096个块

    第一周期和第二周期传递页内地址

    第三周期到第五周期传递的是页地址(块地址和页地址)

    0x7d10400

    0b 0000 0111 1101 0001 0000 0100 0000 0000(A11不用管)

    1th cycle:0x00 (A0~A7)

    2th cycle:0x04

    3th cycle:0x20

    4th cycle:0xFA

    5th cycle:0x00

    这样,我们要访问nand flash的某个地址的数据的时候,如何将地址传给nand,就清楚了

    5.ZYNQ 的SMC模块

    SMC名称static memory controller,可以用来做nand,sram和nor的控制器,这里只介绍针对nand的控制部分

    该部分的框图如下:

    SMC负责处理对nand flash所有的命令、地址和数据操作,在zynq的0xe000e000地址可以访问到smc的控制和状态寄存器:

    这里主要是配置功能选择nand 还是nor,flash的位宽,ecc功能,flash对应的timing时序,在配置完成该部分之后,如何将对flash的命令,地址和数据送到nand,这部分手册并没有介绍。

    手册:The SMC is based on ARM's PL353 static memory controller.

    这部分是通过一个芯片PL353实现的,要搞清楚这部分的具体协议,需要下载手册,手册在xilinx的官网上可以找到(PL350serials)。

    The SMC is an Advanced Microcontroller Bus Architecture (AMBA) compliant
    System-on-Chip (SoC) peripheral

    该器件兼容AXI总线,既可以直接访问,也可以通过axi-apb桥总线直接去访问,如果支持8位的nand flash,axi访问的位宽32位

    下面有一张总体框图:

    图中可以看到,0xe000e000地址段的寄存器组,是基于apb总线的,并不能访问到命令和读写FIFIO,必须经过“FORMAT”模块,才能到达。

    在linux和uboot的源码中,有几段移位操作,就是为了format送到FIFO中去。看懂了这个操作,通过SMC操作flash就基本没问题了。

    AXI的接口信号如下:

    这里我们不需要去详细了解他的信号概念,只需要大致了解对应的channel就行

    这里是apb的总线的外部信号,可以看到0xe000e000地址当中出现的user_status和user_config寄存器,这两个寄存器如何配置暂时不用管


    6.PL35X的NAND MEMORY ACCESS

    这部分是重点

    SMC定义了两种phase来传输数据,command phase和data phase,这两个phase包含了command的值,sddress cycles的数量还有smc的片选

    下面这个表分别给出了两个phase在axi地址上的对应位解释:

    6.1command phsae传输

    command phase的传输在axi总线上总是一个写事件

    address cycles的范围为0~7,实际目前的flash一般都是5个cycle

    start command就是手册对应的发起请求操作的命令,例如读页,擦除块,读取ID等等

    end command是第二种命令,该命令在所有cycles执行结束之后执行,也可以理解为第二个命令

    end command valid表示end command是否要被执行

    6.2data phase传输

    data phase的传输在axi总线上是读写都存在的时间,读写flash

    end command在数据传输之后,该命令会被处理

    end command valid表示end command是否要被执行

    clearcs 当设置的时候,nand flash的片选会被接触,当不设置的时候,片选保持

    ecc last改为如果没有设置ecc使能则无效,否则作为最后一个指令传输到nand

    7read id

    有了以上信息,我们尝试的读取nand flash的id

    smc control and status register base addr:0xe000e000

    smc nand flash memory base addr:0xe1000000

    在读取ID之前,需要设置zynq这一端对smc模块的控制寄存器,具体代码如下:

    int zynq_nand_flash_ctl_init(void)
    {
    	u32 status;
    	/* disable interrupts */
    	zynq_nand_write(&zynq_nand_smc_base->cfr,ZYNQ_NAND_CLR_CONFIG);
    	
    	/* Initialize the NAND interface by setting cycles and operation mode */
    	zynq_nand_write(&zynq_nand_smc_base->scr,ZYNQ_NAND_SET_CYCLES);
    	
    	/*flash 为8位位宽*/
    	zynq_nand_write(&zynq_nand_smc_base->sor,ZYNQ_NAND_SET_OPMODE_8BIT); 
    	zynq_nand_write(&zynq_nand_smc_base->dcr,ZYNQ_NAND_DIRECT_CMD);
    	/* Wait till the ECC operation is complete */
    	status = zynq_nand_waitfor_ecc_completion();
    	if (status < 0) {
    		printf("%s: Timeout\n",__FUNCTION__);
    		return status;
    	}
    	/* Set the command1 and command2 register */
    	zynq_nand_write(&zynq_nand_smc_base->emcmd1r, ZYNQ_NAND_ECC_CMD1);
    	zynq_nand_write(&zynq_nand_smc_base->emcmd2r, ZYNQ_NAND_ECC_CMD2);
    	return 0;
    }

    然后读取ID的指令:0x90,之前需要reset一下0xff,通过command写操作,将指令传递进去,就可以读取到id了:

    	cmd_phase_addr = (unsigned int)xnand.nand_base        |
    			 (curr_cmd->addr_cycles << ADDR_CYCLES_SHIFT)    |
    			 (end_cmd_valid << END_CMD_VALID_SHIFT)          | 
    			 (COMMAND_PHASE)                                 |
    			 (end_cmd << END_CMD_SHIFT)                      |
    			 (curr_cmd->start_cmd << START_CMD_SHIFT);
    	printf("cmd_phase_addr:%0x\n",cmd_phase_addr);
    	
    	cmd_addr = (unsigned int)cmd_phase_addr;
    	/* Get the data phase address */
    	end_cmd_valid = 0;
    	data_phase_addr = (unsigned int)xnand.nand_base       |
    			  (0x0 << CLEAR_CS_SHIFT)                         |
    			  (end_cmd_valid << END_CMD_VALID_SHIFT)          |
    			  (DATA_PHASE)                                    |
    			  (end_cmd << END_CMD_SHIFT)                      |
    			  (0x0 << ECC_LAST_SHIFT);
    	
    	zynq_nand_mem_base = data_phase_addr;

    这里读取ID不再是从基地址0xe1000000读取,根据pl35x的协议,这里zynq_nand_mem_base被赋值为了data_phase_addr,取数据需要从这个地址去取。


    第一个cycle为manufacture id,第二个cycle为dev id,依次,一共5个cycle可以将信息全部读出来。

    展开全文
  • ZYNQ-nand flash分区

    千次阅读 2018-02-02 10:37:29
    1.u-boot中利用mtdparts命令进行分区,添加到设备树文件dts中,bootargs=“..”中,kernerl设置...配合内核中:在对应的nand的arch/arm/mach----.c中添加分区信息。mtd-partition 结构体分区。  s3c2410_name_set为.n
    • 1.u-boot中利用mtdparts命令进行分区,添加到设备树文件dts中,bootargs=“..”中,kernerl设置Driver MDT-》cmd line partition table parsing "打钩"选上
    • 2.配合内核中:在对应的nand的arch/arm/mach----.c中添加分区信息。mtd-partition 结构体分区。

     s3c2410_name_set为.name 与mtdparts中ID一致。

    展开全文
  • zynq Nand flash,QSPI,EMMC接口

    千次阅读 2016-07-20 14:31:41
    2.选用Nand Flash加载程序,但是客户可能会担心Nand Flash有坏块不好管理; 3.选用小QSPI Flash,镜像文件跟用户数据存储在EMMC存储器,eMMC存贮器走SDIO2.0协议,最大支持32G bit;1 DDR3 SDRAM...
    Static Memory Controller (SMC) Interface:Only one SMC memory interface can be used in a design. The SMC controller consumes many of the MIO pins and neither of the SMC memory interfaces can be routed to the EMIO.
    For example, if an 8-bit NAND Flash is implemented, then Quad-SPI, is not available and the test port is limited to 8-bits. If a 16-bit NAND Flash is implemented, then additional pins are consumed.Ethernet 0 is not available. The SRAM/NOR interface consumes up to 70% of the MIO pins,

    eliminating Ethernet and USB 0.


    flash有三种方式:

    1.客户直接选一颗稍大容量QSPI,程序通过QSPI加载;

    2.选用Nand Flash加载程序,但是客户可能会担心Nand Flash有坏块不好管理;

    3.选用小QSPI Flash,镜像文件跟用户数据存储在EMMC存储器,eMMC存贮器走SDIO2.0协议,最大支持32G bit;1


    DDR3 SDRAM:

    1.DDR3 SDRAM 最大支持8G bit


    展开全文
  • zynqnand-flash驱动

    2020-11-17 15:40:38
    pl35x_nand驱动程序 按照阅读linux驱动程序的方法,来解读pl35x_nand.c文件。首先也是注册驱动,如果compatible能够与设备树对应上,则调用probe函数,先看下probe函数都干了啥? static int pl35x_nand_probe...
  • 矿板简介 EBAZ4205是矿机的控制板,拆机后可以作为开发板使用,但是需要经过一些硬件上的改动。如果不是对FPGA或者ZYNQ硬件很...板子的默认启动模式是Nand Flash启动,网上有很多的教程是把启动模式改成SD卡启动,...
  • ZYNQ烧写程序到flash

    2021-05-10 09:43:51
    image File选择2中生成的BOOT.bin文件,FSBL File选择fsbl.elf文件,连接好ZYNQ的Jtag,点击Program,即可烧录。 4.烧录程序到FLASH失败 如果是第一次烧录,需更改创建的fsbl工程下的main函数,在如下代码处加入...
  • ZYNQ QSPI_FLASH程序固化

    千次阅读 2019-06-04 10:06:37
    制作镜像文件需要:PL...众所周知 zynq 具有多种启动方式: NOR, NAND, Quad-SPI, SD Card 以及 JTAG 。 zynq 如何判断到底从哪里启动呢? 事实上, 当上电后, zynq 会根据模式管脚的设定选用 boot 的方式。ZYNQ...
  • Xilinx Zynq pl353-nand使用

    千次阅读 2020-01-02 16:42:59
    参考 ...Zynq Pl353 SMC and NAND drivers u-boot #define CONFIG_NAND #define CONFIG_NAND_ZYNQ linux 开启配置, CONFIG_PL35X_SMC = y CONFIG_MTD_NAND = y CONFIG_MTD_NAND_PL35X = y ...
  • ZYNQ Linux 移植:包含petalinux移植和手动移植debian9 ZYNQ #5 - 从vivado工程开始,从emmc启动Linux_里先森-CSDN博客 流程 对于手动移植,所需的文件为: BOOT.bin(FSBL+fpga_bit文件+u_boot.elf...
  • ZYNQ-QSPI Flash读写操作

    千次阅读 2021-05-24 13:17:49
    # 学习内容 本文首先介绍Flash和QSPI Flash控制器的相关内容,然后使用 QSPI Flash 控制器,开发板上的 QSPI Flash 进行写、 读操作。通过对比读出的数据是否等于写入的数据, 从而验证读写操作是否正确。
  • ZYNQ平台UBOOT下烧录程序到Flash

    千次阅读 2018-12-03 21:37:29
    上篇文章讲述了通过SDK引导启动UBoot,在Uboot启动之后可以通过网口tftp功能下载主机提供的相应程序,并烧录到Flash制定位置。 uboot启动之后, setenv serverip 192.168.0.19 &amp;amp;amp;amp;amp;&amp;...
  • zynq QSPI Flash 启动过程

    千次阅读 2016-08-23 17:11:05
    U-boot 修改flash 启动地址,偏移地址: u-boot-xlnx-xilinx-v2015.4\u-boot-xlnx-xilinx-v2015.4\include\configs\zynq-common.h 基地址:  "ethaddr=00:0a:35:00:01:22\0" \  "kernel_image=uImage\0" \
  • 板上zynq通过spi-1连接一片SPI FLASH,型号为n25q128a11。示意图如下: 由于之前都是通过EMC挂载NOR FLASH,这是第一次使用SPI FLASH挂载文件系统。Xilinx Wiki上有对SPI FLASH挂载文件系统的说明:插入网址。 ...
  • 配置ZYNQ的PS从QSPI FLASH启动

    千次阅读 2020-03-21 20:18:20
    配置ZYNQMP的PS从QSPI FLASH启动: PS会根据MODE PIN来决定从哪种存储介质中进行启动 从原理图上可知,MODE[3:0]引脚的值为0010,再根据前面BOOT MODE的表,可知PS端的启动模式为Quad-SPI(32b),即QSPI ...
  • 板子上的zynq通过emc外接一块nor flash,地址分配如下: Nor flash的起始地址为0x80000000。当zynq上运行linux后可以通过对该地址起始的区域进行擦除、读写操作从而对NOR FLASH进行操作。具体参看前一篇博客...
  • EBAZ4205 是ebit的控制板,价格便宜。EBAZ4205使用XILINX XC7Z010-1CLG400I soc 包含两个硬核ARM A9,以及ARTIX-7逻辑。板子有一颗128M x 16 bit DDR3 CLK800Mhz,一块128M字节 NAND FLASH,PS 33.333Mhz osc...
  • 对于ZYNQ,有多种启动方式,比如从JTAG启动、从QSPI(即Flash)启动,从SD卡启动等。对于从JTAG启动的,我们直接运行程序就OK了。对于从Flash和SD卡启动的,需要我们生成这两种情况下对应的文件,并烧到对应的位置才...
  • EBAZ4205 ZYNQ 7Z010 裸机程序NAND固化 JTAG调试方法 如果本文有地方写的不清楚可以跳转过去看下。本文主要是硬件改动,软件烧录与测试方法与参考文章并无区别。可以先看完本文的硬件改动后再看参考文章,改动的地方...
  • 前言 在前面的章节中,我们编写的程序都是存在片上RAM中的。...一般对面FPGA,我们采用的是将程序固化到SPI FLASH种,然后FPGA上电后自动运行SPI FLASH种的程序。(比如我之前用的cyclone iv) 不过 对于Z
  • 本文是对xilinx zynq ultrascale+ FPGA NAND flash烧写启动的一个记录。 参考了网上资料如下: https://blog.csdn.net/uio159753/article/details/90297169 https://zhuanlan.zhihu.com/p/342879713 zynq ...
  • 在裸板编程驱动NAND FLASH时对nand flash的数据读取一切正常,但是在擦除(已确认是块的起始地址)的时候怎么都不成功,但是用别人的代码能够成功,我怀疑我的代码有错误,然后反复比对我的擦除代码,甚至直接复制...
  • 本测试环境为xilinx z7系列的xc7z045,在pl端外接axi_quad_spi ip外接m25p10flash芯片 ip连接及配置如下 2.生成bit并导出到sdk 3.在petalinux中修改设备树 注意设备树目录是在用户可修改的文件夹里的 4.启动后 ...
  • 本文档为ti-sdk安装包nandflash启动时遇到的问题和解决方法,并附赠ubihf文件的制作方法
  • 首先声明文档是自己原创的,通过刻苦阅读linux源代码和翻阅xilinx zynq datasheet写出来的总结文档,对于想了解基于zynq的linux外设驱动的童鞋,有一定帮助,由于是呕心原创,所以分数较高,望见谅
  • NandFlash控制器

    2019-07-13 21:53:01
    NandFlash控制器 本文以MT29F4G08ABADA 型号为例,介绍Uboot启动过程中,如何初始化和运行该flash。 MT29F4G08ABADA容量为4Gbit 1page=(2K+64)byte 1block=(2K+64)*64page=(128K+4K)byte 1plane=(128K+4K)2048...
  • 不能从nandflash启动原因之一

    千次阅读 2013-03-23 19:54:55
    我在调试是怎么也不能从nandflash启动,但是能从norflash和SDRAM中启动,同时读写nandflash的功能也能实现,于是我就将nandflash全部搬到SDRAM中,结果发现nandflash中竟然只有0x40000大小的内容,我太高兴了,终于...
  • ZYNQ petalinux系统启动文件固化到FLASH

    千次阅读 2020-03-10 23:54:53
    首先明确:petalinux启动文件从FLASH启动系统,也就是将启动文件放入FLASH中。 1,vivado配置: 2,导入硬件后配置petalinux source /opt/Xilinx/Vivado/2017.4/settings64.sh source /opt/pkg/petalinux/...
  • zynq-smc驱动框架解析

    2020-11-16 18:03:29
    zynq-nand flash linux驱动解析
  • This is a list of required items, necessary actions, and points to be considered, when debugging NAND programming and booting on Zynq UltraScale+ MPSoC. Some UBIFS tips are included in this art

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 419
精华内容 167
关键字:

flashnandzynq