单片机
返回首页

神舟IV学习笔记(十)SPI存储W25X16

2020-12-21 来源:eefocus

SPI是英语 Serial Peripheral interface 的缩写,顾名思义就是串行外围设备接口。是 Motorola首先在其 MC68HCXX 系列处理器上定义的。SPI 接口主要应用在  EEPROM,FLASH,实时时钟,AD 转换器,还有数字信号处理器和数字信号解码器之间。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为 PCB 的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议,STM32 也有 SPI 接口。


SPI 接口一般使用 4 条线:

MISO  主设备数据输入,从设备数据输出。

MOSI  主设备数据输出,从设备数据输入。

SCLK 时钟信号,由主设备产生。

CS 从设备片选信号,由主设备控制。


SPI主要特点有:可以同时发出和接收串行数据;可以当作主机或从机工作;提供频率可编程时钟;发送结束中断标志;写冲突保护;总线竞争保护等。SPI总线四种工作方式SPI模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。如果CPOL=0,串行同步时钟的空闲状态为低电平;如果 CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果 CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。SPI  主模块和与之通信的外设备时钟相位和极性应该一致。


STM32 的 SPI 功能很强大,SPI 时钟最多可以到 18Mhz,支持 DMA,可以配置为 SPI 协议或者 I2S 协议。


SPI1的使用就介绍到这里,接下来介绍一下 W25X16。W25X16是华邦公司推出的继W25X10/20/40/80(从 1Mb~8Mb)后容量更大的 FLASH 产品,W25X16 的容量为 16Mb,还有容量更大的 W25X32/64,ALIENTEK 所选择的 W25X16 容量为 16Mb,也就是 2M 字节,同AT45DB161 是一样大小的。 W25X16 将 2M 的容量分为 32 个块(Block),每个块大小为 64K 字节,每个块又分为 16个扇区(Sector),每个扇区4K个字节。W25X16 的最少擦除单位为一个扇区,也就是每次必须擦除 4K 个字节。这样我们需要给 W25X16 开辟一个至少 4K 的缓存区,这样对 SRAM 要求比较高(相对于 AT45DB161 来说),但是它有价格及供货上的优势。 W25X16 的差些周期为10000 次,具有20 年的数据保存期限,支持电压为2.7~3.6V,W25X16支持标准的 SPI,还支持双输出的 SPI,最大 SPI 时钟可以到 75Mhz(双输出时相当于 150Mhz),更多的 W25X16 的介绍,请参考 W25X16 的 DATASHEET。


软件我把W25X16需要调用的函数封装到一个文件中

void W25X16_Configuration(void);

void SPI_FLASH_SectorErase(u32 SectorAddr);

void SPI_FLASH_BulkErase(void);//Erases the entire FLASH

void SPI_FLASH_PageWrite(u8* pBuffer, u32 WriteAddr, u16 NumByteToWrite);

void SPI_FLASH_BufferWrite(u8* pBuffer, u32 WriteAddr, u16 NumByteToWrite);

void SPI_FLASH_BufferRead(u8* pBuffer, u32 ReadAddr, u16 NumByteToRead);

u32 SPI_FLASH_ReadID(void);//是常量0XEF3015,可以用于判断是否存在W32X16芯片

u32 SPI_FLASH_ReadDeviceID(void);

void SPI_FLASH_StartReadSequence(u32 ReadAddr);

void SPI_Flash_PowerDown(void);

void SPI_Flash_WAKEUP(void);


我们实现写一些数据到FLASH里,再读出来看看是不是一样的,测试结果

看出能够检测到FLASH,写入一些字符串,也能读出。


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • CCD图像传感器在微光电视系统中的应用

  • 光控音效发生器电路

  • 如何利用ESP8266制作一个简单的四轴飞行器

  • 基于IC555的可变PWM振荡器电路

  • 如何使用LED驱动器LM3915制作振动计

  • 使用NE555和磁簧开关的橱柜照明电路

    相关电子头条文章