SPI协议

  SPISerial Peripheral Interface,串行外围设备接口) 通讯协议,是 Motorola 公司提出的一种同步串行接口技术,是一种高速、全双工、同步通信总线,在芯片中只占用四根管脚用来控制及数据传输,广泛用于 EEPROMFlashRTC(实时时钟)、 ADC(数模转换器)、 DSP(数字信号处理器)以及数字信号解码器上,是常用的也是较为重要的通讯协议之一。
  SPI 通讯协议的优点是支持全双工通信,通讯方式较为简单,且相对数据传输速率较快;缺点是没有指定的流控制,没有应答机制确认数据是否接收,与 IIC 总线通讯协议相比,在数据可靠性上有一定缺陷。

SPI协议层

 

                                                          一主一从SPI通讯设备连接图

 

 

                                                                                                                                                                                     一主多从SPI设备连接图

四种模式的波形图:

 

 四种模式的时序图

 

 

                                                                                                                                                                                  CPHA=0时的SPI通讯模式

其中CPOL控制了SCK空闲状态时的状态 ,CPOL=0时空闲态为0,SPOL=1时,空闲态为1;CPHA控制时奇数边沿采样还是偶数边沿采样,CPHA为=0时是奇数边沿采样,反之亦然 

CPOL(clock polarity)时钟极性

CPHA (clock phase)     时钟相位                                                                                                                                                                 

 对于数据发送时,是低位在前还是高位在前,没有固定的模式,需要和收发匹配就行。

FPGA代码的固化有两种方式,一种是将生成的SOF文件烧录到SRAM中,就是平时常说的上版调试,优点是烧录速度快,缺点是掉电会丢失;另一种方式是将生成的JIC文件烧录到FLASH文件中,优点是掉电不丢失,缺点是烧录时间较长;

那么如何生成JIC文件呢,首先需要预先生成SOF文件,点击左上角file文件,进入图中选项,然后选择需要生成JIC,选择flash型号,同时选择FPGA型号和需要的SOF文件

          

 

 

 程序固化好了,现在即使是掉电也不会丢失程序了!但是如果想要对固化的程序进行擦除的化,可以使用两种方法,①选中图中的Erase就可以进行擦除了!

 

 

 ②第二种就是编写全擦除程序进行擦除。查看具体手册中的擦除指令,全擦除指令是将所有bit变为1,而写入是相反的,将需要修改的1改为0。具体的时序是先写入一个写使能状态(WREN),使设备处于写锁存(WEL)的状态,然后再写入擦除指令(BE),写入数据时,需要将片选信号拉低 ,在第八个数据被锁存后拉高。 只有片选信号被拉高后,指令才会被执行,指令执行存在一个擦除的周期,17S-40S,具体芯片时间不同,这里用的是野火所使用的FLASH芯片手册。(WREN)→(WEL)→(BE)                                                                                                                            

   

全擦除指令波形

 

写使能指令:0000 0110(06h)

在每一次页写(PP),扇区擦除(SE),全擦除(BE)和写状态寄存器(WRSR)之前,都需要写入写使能指令

 

 

 写使能指令波形

 

 

 需要注意几个关键时间:Tslch(S Active Setup Time)片选信号激活设置时间,表示片选信号从拉低到第一个bit位输入的时间;Tchsh(S Active Hold Time)片选信号激活保持时间,表示最后一个bit位输入完成到片选信号拉高的时间;tSHSL(S Deselect Time)片选信号重新拉低的时间,即两个指令之间的等待时间,这里最小值为100ns。

串行输入时序

时钟频率设置:

 

 

 为了代码的复用性,这里选择的时钟低于20MHz,对传入的50MHz进行四分频,12.5MHz作为时钟信号

 全擦除时序:

 

 

 

 扇区擦除:

对于扇区擦除,和前面全擦除类似,需要写入写使能指令(WREN),使器件处于写锁存状态,然后写入Secter Erase(SE)扇区擦除指令,然后再写入24Bit的扇区地址,该地址可以使该扇区内的随意的一个地址。