发布网友 发布时间:2022-05-10 01:59
共1个回答
热心网友 时间:2023-09-27 20:51
spi的应用实例: 执行命令时,首先通过SPI串口往Flash发送一连串的数据,然后以命令字开头,除了“读状态寄存器”外,后面还要跟上页地址和页内的字节地址发及一些无关位。“读主存”时,首先需要往Flash发送64bit的命令,即:命令字52(8bit)+4个“r”+页地址(11bit)+页内字节的起始地址(9bit)+32个无关位,发送完这64bit(通常是组合成8个字节)命令后,紧跟着从Flash读数据以可以了(即后面的SCK信号使得数据从SO脚移出),每读出一个字节,字节地址自动加1,如遇到该页的末尾,只要有SCK信号,系统再加到该页的开关处读数据。在整个操作过程中,CS脚始终为“0”;当CS脚回到“1”时,将终止此次操作,SO脚恢复到高阻状态。 主存传送到Bufferx是指将2048页主存中的任何一页(由PA10~PA0决定)的内容复制到缓冲区,发送完32bit命令后,当CS脚由“0”为“1”后,数据的复制才真正开始。 主存与Bufferx的比较主要是看主存中的某一页与缓冲区是否一样,当CS脚回到“1”后,比较才开始进行,比较的结果(是否一样)记录在状态寄存器的bit6中。 把带擦除的Bufferx传送到主存就是将缓冲区的内容复制到主存中的某一页,复制前应将缓冲区的内容复制到主存中的某一页,复制前应将主存中的该页数据全部擦掉,所有这些操作只有等到CS脚回到“1”后才能进行。对于不带擦除的Bufferx传送到主存的操作,在命令执行前,指定的主存页必须已被擦除过。 以Bufferx为缓冲为主存编程就是将“写Bufferx”与“带擦除的Bufferx传送到主存”进行组合。在发送完命令后,写入Flash的数据将被写入到缓冲区内,如果遇到缓冲区末尾,要继续写入的数据又从缓冲区开头写入,直到CS脚由“0”到“1”后,主存中被指定的页的数据被擦除后再将缓冲区的数据整个复制到主存的指定页中。 3 状态寄存器及操作完成指示 一般向Flash发送57H后以可读出状态寄存器(移出时,高位在前),状态寄存器的位定义如表2所列。其中Bit7为“0”表示器件忙,为“1”表示可以接收新的命令;Bit6是比较结果位,为“0”表示主存与缓冲区的数据一样,为“1”时表示最少有一个bit不同;Bit5~Bit3为该系列器件的容量指示位,一共种8种容量,对于AT45D041来说,该区域为“011”;Bit2~Bit0未使用。一共蛾6种操作会使器件处于“忙”状态,这6种操作是: ●主存传送到Bufferx; ●主存与Bufferx比较; ●带擦除的Bufferx传送到主存; ●不带擦除的Bufferx传送到主存; ●Bufferx为缓冲对主存编程; ●Bufferx为缓冲自动重编程。 这6种操作均需要监视状态寄存器,以便知道操作是否完成。除了监视状态寄存器外,更好的方法是将芯片管脚RDY/BUSY与CPU的某个中断相连,并将中断设置为升沿触发,操作一完成即可触发中断,这样可能节省大量的CPU时间。 4 SPI接口及应用 4.1 SPI接口 串行外围接口一共有4种操作模式,图3为其时序图。这些操作模式决定了传送与接收的时钟相位和极性,换句话说,也就是这些模式决定了利用时钟信号的哪个沿来控制数据传判断的方向。这些模式一般由主机(CPU)来设置。 当CPOL=0时,时钟信号SCK在空闲时为“0”,即模式0和1; 如果CPOL=1,则SCK在空闲时为“1”,即模式2和3; 当CPHA=CPOL时,数据总在时钟信号的上升沿移进Flash,下降沿移出Flash,即模式0和3。 4.2 SPI接口应用 对于12位的数据采集系统,使用AD公司的Flash集成MCU芯片AC812可使电路设计更加简单快捷。由于AC812有一个与I2C兼容的SPI接口,所以与AT45系列的Flash接口只需将相应的管脚相连即可,只不过要将AC812设为主机,而AT45D041自然以是从机了。在AC812中有SPI控制寄存器(SPICON)与SPI数据寄存器(SPIDAT),数据寄存器的使用如同使用RS232的Buffer一样简单,控制寄存器的位定义如