SPI协议
SPI(Serial Peripheral Interface,串行外围设备接口) 通讯协议,是 Motorola 公司提出的一种同步串行接口技术,是一种高速、全双工、同步通信总线,在芯片中只占用四根管脚用来控制及数据传输,广泛用于 EEPROM、 Flash、 RTC(实时时钟)、 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的扇区地址,该地址可以使该扇区内的随意的一个地址。