FPGA配置芯片EPCS读写操作--STM32读写

注意事项:

(1)首先STM32需要设置nCE和nConfig信号,即nCE置高,nConfig拉低,获得EPCS的控制权,而后对EPCS操作,操作完成后需要释放这两个管脚,即nCE拉低,nConfig置高。

(2)EPCS的极性为:sck为空闲状态为高电平,采样边沿为SCK的第二个跳变沿,(即上升沿,注意前提是SCK空闲为高)

SPI_InitStruct.SPI_Direction= SPI_Direction_2Lines_FullDuplex;

SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b;

SPI_InitStruct.SPI_Mode = SPI_Mode_Master;

SPI_InitStruct.SPI_CPOL = SPI_CPOL_High;

SPI_InitStruct.SPI_CPHA = SPI_CPHA_2Edge;

SPI_InitStruct.SPI_NSS = SPI_NSS_Soft ;

SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16;

SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;

(3)EPCS操作时对于地址和指令是MSB的,而对于写数据却是LSB的,因为上电FPGA读取EPCS内部数据时是LSB读取的。所以有如下操作代码。

SPI_FLASH_Write_Enable();                  //SET WEL

spi_cs_low;

SPI_Send_byte(EPCS16_ByteProgram );     //write byte

add1 = (u8)((WritingAddr)>>16);

add2 = (u8)((WritingAddr)>>8);

add3 = (u8)((WritingAddr));

SPI_Send_byte(add1);

SPI_Send_byte(add2);

SPI_Send_byte(add3);

for(num=0;num<NumByteToWrite;num++)

{

wdata = pBuffer[WritingNum];

if(MSB_SWAP_LSB)

wdata = ((wdata&0x01)<<7)|((wdata&0x02)<<5)|((wdata&0x04)<<3)|((wdata&0x08)<<1)|((wdata&0x10)>>1)|((wdata&0x20)>>3)|((wdata&0x40)>>5)|
                  ((wdata&0x80)>>7);

else

wdata = pBuffer[WritingNum];

SPI_Send_byte(wdata);

WritingAddr++;

WritingNum++;

if(WritingAddr%SPI_FLASH_PAGE_SIZE==0 || WritingNum==NumByteToWrite)

{

break;

}

}

FPGA配置芯片EPCS读写操作--STM32读写

时间: 2024-09-29 09:26:39

FPGA配置芯片EPCS读写操作--STM32读写的相关文章

[FPGA]FPGA配置(AS、PS、JTAG)

FPGA配置 作者:长江学者 2007-11-23 09:51:29 标签: 我记录我的校园知识/探索 很多兄弟对于CPLD下JTAG的下载很熟悉了,可转到FPGA来的时候,多多少少有些迷惑,怎么出现配置芯片了,为什么要用不同的下载电缆,不同的下载模式?我就自己知道的一点东西谈一些个人的见解,并发一些资料.希望路过的朋友喝个采,版主给点威望.有问题大家也一起讨论,欢迎拍砖. 1.FPGA器件有三类配置下载方式:主动配置方式(AS)和被动配置方式(PS)和最常用的(JTAG)配置方式. AS由FP

fpga配置过程(转载)

fpga 配置时序图如下 1.FPGA器件有三类配置下载方式:主动配置方式(AS)和被动配置方式(PS)和最常用的(JTAG)配置方式.             AS 由FPGA器件引导配置操作过程,它控制着外部存储器和初始化过程,EPCS系列.如EPCS1,EPCS4配置器件专供AS模式,目前只支持 Stratix II 和Cyclone系列.使用Altera串行配置器件来完成.Cyclone器件处于主动地位,配置器件处于从属地位.配置数据通过DATA0引脚送入 FPGA.配置数据被同步在DC

Android数据存储——文件读写操作(File)

Android文件读写操作 一.文件的基本操作 Android中可以在设备本身的存储设备或外接的存储设备中创建用于保存数据的文件.在默认状态下,文件是不能在不同程序间共享的. 当用户卸载您的应用程序时,这些文件删除. 文件存储数据可以通过openFileOutput方法打开一个文件(如果这个)文件不存在就自动创建这个文件),通过load方法来获取文件中的 数据,通过deleteFile方法删除一个指定的文件. 1,常用方法介绍: File是通过FileInputStream和FileOutput

Python写自动化之注册表的读写操作

Windows上的自动化测试经常会接触到对于注册表的读写操作问题,比如,获取一个程序的安装目录,一般情况下,我们可以去注册表的App Paths下去查找,这时就涉及到了注册表的读取操作,我们使用Python的_winreg模块来实现,代码如下: def reg_query(path, key): try: path = path.replace("/", "\\") rootName = path[:path.find("\\")] subPat

文件的新建、定位、截短和读写操作

1.创建一个新文件,创建新文件除了可以使用open函数之外还可以用creat()函数. 创建文件函数 creat(const char * pathname, mode_t mode) 头文件 :#include <fcntl.h> 参数说明:第一个参数pathname同open函数的第一个参数具有同样的意义,区别在于这是需要创建的文件的地址而不是需要打开文件的地址,第二个参数mode是新建文件的访问权限. 返回值:成功返回1,失败返回-1. 函数说明:creat()函数能够创建一个新的文件,

对SD卡的读写操作-保存用户登录密码

import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStreamReader; import android.content.Context; import android.os.Environment; public class Fileservice { /** * 存储用

Python 文件操作之读写错误

错误还原: 读错误 在对文件进行读操作过程中,试图将txt文件中的数据按照4个字节的大小(1点)依次读出并进行数据处理 ,可读到ae99 1a41时,数据不再连续,1a无法读出,百思不得其解,各种尝试后仍然一筹莫展,一度怀疑python对于文件操作存在bug. 代码如下: uartfile = open('addata0.txt','r') data = uartfile.read(4) 写错误 对文件写操作时,产生同样错误,再遇到0a0d时无法连续写入. 基础知识: 文件的读写操作存在两种模式

java大文件读写操作,java nio 之MappedByteBuffer,高效文件/内存映射

java处理大文件,一般用BufferedReader,BufferedInputStream这类带缓冲的Io类,不过如果文件超大的话,更快的方式是采用MappedByteBuffer. MappedByteBuffer是java nio引入的文件内存映射方案,读写性能极高.NIO最主要的就是实现了对异步操作的支持.其中一种通过把一个套接字通道(SocketChannel)注册到一个选择器(Selector)中,不时调用后者的选择(select)方法就能返回满足的选择键(SelectionKey

oracle读写文件--利用utl_file包对磁盘文件的读写操作

摘要: 用户提出一个需求,即ORACLE中的一个表存储了照片信息,字段类型为BLOB,要求能导出成文件形式. 本想写个C#程序来做,后来想起ORACLE有很多包,功能很好很强大,于是网上参考了些文章完成了. 主要是用了ORACLE的两个包:UTL_FILE和DBMS_LOB. 实现过程: 第一步:以管理员用户登陆设置可操作目录 --CREATE DIRECTORY privilege is granted only to SYS and SYSTEM by default. create or