zynq 7000下读写qspi 及flash 唯一id

本文主要演示zynq 7000下对Qspi 的读写操作,以及读取8字节唯一ID, 可以用于简单加密。
我在使用altera 的时候,写了一篇读写flash 及其ID的文章。

在我转入zynq 7000的时候,自然也要有读写QSPI FLASH, 以及读取其ID。

本文分为四部分:硬件设计,软件设计,测试验证,期待

本文的前提条件是读者会helloworld 实验,也就是会zynq 7000的SDK开发过程,如果不会,那先去看我的zynq 7000下的helloworld 实验,或者开发板提供的helloworld 实验教程。

我实验平台是黑金的核心板AC7010, 其板上的QSPI芯片是W25Q256FV

工程下载链接:http://pan.baidu.com/s/1qYxAnFI 密码:p2c6

单一源代码下载链接  http://pan.baidu.com/s/1dFcsf3F

1  硬件设计

硬件设计基本和helloworld 一样,不同的是要选择QSPI, 否则怎么做实验呢。还有工程名字取为qspi。

在zynq配置的peripheral  I/O Pins 里选择Quad SPI Flash, 如图:

在zynq配置的MIO configuration 里选择Quad SPI Flash的每个脚为 fast, 如图:

除此以外,都和hello world 实验的硬件设计一样。

2: 软件设计

在SDK里 新建工程,取名为qspi_t , 在Next 里可以选择hello world 或者empty project。下载我提供的xqspips_flash_polled_example.c 文件, 放入.src ,就是hellowrld.c 的地方。 删除helloworld.c 。

为什么取这样一个名字呢? 这是Xilinx提供的样例程序,你可以在你的xilinx 目录下搜索到这个文件。我提供的程序是在其上修改得到的。

FlashWrite, FlashRead, FlashErase, FlashReadID 都是样例程序里包含的。我做的工作只是修改了main函数,还有仿照FlashReadID, 编写了一个FlashReadUID函数。

FlashWrite, 写Flash, 其参数是QSPI驱动指针, FLash写的起始地址, 写入字节数, 写命令

FlashRead, 读Flash, 其参数是QSPI驱动指针, FLash读的起始地址, 读取字节数, 读命令

FlashWrite, 擦出Flash, 其参数是QSPI驱动指针, FLash擦除起始地址, 擦除字节数。

写命令其实只有一个WRITE_CMD, 但读命令有4个选择:READ_CMD, FAST_READ_CMD, DUAL_READ_CMD, QUAD_READ_CMD

FlashReadID 就是读取JEDEC ID

FlashReadUID 是我仿照上面函数写的, 我查看了W25Q256FV的手册,读取唯一ID的cmd 是0x4B, 我不确定其他芯片是否一样,你需要自己查看。

主程序的流程是:基本初始化,获取Flash 的驱动指针,给WriteBuffer 数组赋值,就是打算 写什么东西进去,调用2个id 读取, 擦除,读取,显示内容,写入, 读取,显示内容,调用2个id 读取并显示。

3:程序运行

以下是程序运行在串口监视终端上的显示内容

4 期待

按资料介绍,唯一id 每个芯片都是不一样的,可不可以把你 的id 告诉我,看看是不是都不一样。

如果这样的话,我们就可以用这个id 加密,就是用一个算法,比如des,des3,得到一个结果,而这个结果只有知道算法的人才知道。把这个结果填入一个地方,那就是程序员认可了。这样如果简单复制程序,那就不行的,防止盗版。

其实xilinx 也有一套加密的算法,估计他那更科学。我还没有学会,知道了和大家分享。

xilinx 的加密方法相关文档是:https://www.xilinx.com/support/documentation/user_guides/ug1025-zynq-secure-boot-gsg.pdf

和 xapp1175_zynq_secure_boot.pdf 正在学习中。

告诉我id 的方法可以是留言,大家都可以看到,或者qq 等其他方式。

发表评论

电子邮件地址不会被公开。 必填项已用*标注