AT25M01使用说明SPIEEPROMSTM32_第1页
AT25M01使用说明SPIEEPROMSTM32_第2页
AT25M01使用说明SPIEEPROMSTM32_第3页
AT25M01使用说明SPIEEPROMSTM32_第4页
AT25M01使用说明SPIEEPROMSTM32_第5页
已阅读5页,还剩4页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、贞眉内容1.芯片访问规那么符合 AT25 系列原那么,可以找相关的例子,但是 25M01 目前没有2.芯片工作原那么,不考虑写保护问题,所有操作的第一步都是要发送写允许指令,然后重新片选有 效,发送下一步的命令。注意问题:SPI 的 EEPROM勺数据输出的原理是,在输入一个字节的同时输出一个字节,没有输入字节,就输出,所以,所谓的读数据,其实质是先发送一个数据,然后在接收一个数据。操作如下:(1) 存放器读1)先片选,在发送写允许指令,片选无效2)片选,发送读存放器指令,读存放器,片选无效(2)存放器写1)先片选,在发送写允许指令,片选无效2)片选,发送写存放器指令,写数据,片选无效(3)

2、写数据1)先片选,在发送写允许指令,片选无效2)片选,发送写数据指令,写数据,片选无效(4) 读数据1)先片选,在发送写允许指令,片选无效2)片选,发送读数据指令,读数据,片选无效注意:STM32 的 SPI 需要,每次都开启voidSPI_EEPROM_Init(void)I SPI_InitTypeDefSPI_InitStructure;GPIO_InitTypeDefGPIO_InitStructure;/*EnableSPI1andGPIOclocks*/*!SPI_FLASH_SPI_CS_GPIO,SPI_FLASH_SPI_MOSI_GPIO,SPI_FLASH_SPI_MIS

3、O_GPIO,SPI_FLASH_SPI_DETECT_GPIOandSPI_FLASH_SPI_SCK_GPIOPeriphclockenable*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO,ENABLE);/*!SPI_FLASH_SPIPeriphclockenable*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);/*!ConfigureSPI_FLASH_SPIpins:SCK*/GPIO_InitS

4、tructure.GPIO_Pin=GPIO_Pin_5;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_Init(GPIOA,&GPIO_InitStructure);/*!ConfigureSPI_FLASH_SPIpins:MOSI*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;GPIO_Init(GPIOA,&GPIO_InitStructure);/*!ConfigureSPI_FLASH_

5、SPIpins:MISO*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;/GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA,&GPIO_InitStructure);/选通采用软件模式-贞眉内容/*!=(uint32_t)(1024*128*2)return0;if(addr=(uint32_t)(1024*128)addr=addr-(uint32_t)(1024*128);nss=2; elsenss=1;SPI_Cmd(SPI1,ENABLE);AT25_Wait

6、Ready(nss);SPI_WREN(nss);NSS_CS_ENABLE(nss);SPI_WriteByte(READ);SPI_WriteByte(uint8_t)(addr&0 x010000)16);/*A16*/SPI_WriteByte(uint8_t)(addr&0 x00FF00)8);/*A15-A8*/SPI_WriteByte(uint8_t)(addr&0 x0000FF);/*A7-A0*/tmp=SPI_ReadByte();NSS_CS_DISABLE();SPI_Cmd(SPI1,DISABLE);returntmp;voidAT25

7、_WriteByte(uint8_tdata,uint32_taddr)一一一精心整理精心整理贞眉内容uint8_tnss=1; uint32_ttt=1024*128*2; if(addr=tt) return;if(addr=(uint32_t)(1024*128)addr=addr-(uint32_t)(1024*128);nss=2;elsenss=1;SPI_Cmd(SPI1,ENABLE);AT25_WaitReady(nss);SPI_WREN(nss);NSS_CS_ENABLE(nss);SPI_WriteByte(WRITE);SPI_WriteByte(uint8_t)(

8、addr&0 x010000)16);/*A16*/SPI_WriteByte(uint8_t)(addr&0 x00FF00)8);/*A15-A8*/SPI_WriteByte(uint8_t)(addr&0 x0000FF);/*A7-A0*/SPI_WriteByte(data);NSS_CS_DISABLE();SPI_Cmd(SPI1,DISABLE);/多字节操作/*brief将缓冲区中的数据写到 I2CEEPRO*paramargpBuffer:缓冲区指针argWriteAddr:写地址*argNumByteToWrite:写的字节数 *retval 无

9、*/voidSPI_EE_BufferWrite(u8*pBuffer,u32WriteAddr,u16NumByteToWrite,uint8_tNSS)一一一u32NumOfPage=0,NumOfSingle=0,Addr=0,count=0;Addr=WriteAddr%I2C_PageSize;count=I2C_PageSize-Addr;NumOfPage=NumByteToWrite/I2C_PageSize;NumOfSingle=NumByteToWrite%I2C_PageSize;/*IfWriteAddrisI2C_PageSizealigned*/if(Addr=0

10、)/*IfNumByteToWriteI2C_PageSize*/else贞眉内容while(NumOfPage-)(SPI_EE_PageWrite(pBuffer,WriteAddr,I2C_PageSize,NSS);精心整理WriteAddr+=I2C_PageSize;pBuffer+=I2C_PageSize; _ if(NumOfSingle!=0)(SPI_EE_PageWrite(pBuffer,WriteAddr,NumOfSingle,NSS);一 一/*IfWriteAddrisnotI2C_PageSizealigned*/else(/*IfNumByteToWrit

11、eI2C_PageSize*/else NumByteToWrite-=count;NumOfPage=NumByteToWrite/I2C_PageSize;NumOfSingle=NumByteToWrite%I2C_PageSize;if(count!=0) SPI_EE_PageWrite(pBuffer,WriteAddr,count,NSS);WriteAddr+=count;pBuffer+=count; while(NumOfPage-) SPI_EE_PageWrite(pBuffer,WriteAddr,I2C_PageSize,NSS);WriteAddr+=I2C_Pa

12、geSize; pBuffer+=I2C_PageSize; _ if(NumOfSingle!=0) SPI_EE_PageWrite(pBuffer,WriteAddr,NumOfSingle,NSS); /*贞眉内容*brief在 EEPROM 勺一个写循环中可以写多个字节,但一次写入的字节数*不能超过 EEPROMK 的大小,AT24C0 狗贞有 8个字节*paramargpBuffer:缓冲区指针* argWriteAddr:写地址*argNumByteToWrite:写的字节数*retval 无*/voidSPI_EE_PageWrite(u8*pBuffer,u32WriteAd

13、dr,u16NumByteToWrite,uint8_tNSS)一一一SPI_Cmd(SPI1,ENABLE);AT25_WaitReady(NSS); SPI_WREN(NSS);NSS_CS_ENABLE(NSS); SPI_WriteByte(WRITE);SPI_WriteByte(uint8_t)(WriteAddr&0 x010000)16);/*A16*/SPI_WriteByte(uint8_t)(WriteAddr&0 x00FF00)8);/*A15-A8*/SPI_WriteByte(uint8_t)(WriteAddr&0 x0000FF);/*

14、A7-A0*/*Whilethereisdatatobewritten*/while(NumByteToWrite-)/*Sendthecurrentbyte*/ SPI_WriteByte(*pBuffer);/*Pointtothenextbytetobewritten*/ pBuffer+;/*SendSTOPcondition*/NSS_CS_DISABLE();SPI_Cmd(SPI1,DISABLE); /*brief从 EEPROMU面读取一块数据 *paramargpBuffer:存放从 EEPROM 卖取的数据的缓冲区指针*argWriteAddr:接收数据的 EEPROM勺

15、地址*argNumByteToWrite:要从 EEPROMgt 取的字节数 *retval 无*/voidSPI_EE_BufferRead(u8*pBuffer,u32ReadAddr,u16NumByteToRead,uint8_tNSS)一一一uint8_tnss=NSS;SPI_Cmd(SPI1,ENABLE); AT25_WaitReady(nss); SPI_WREN(NSS);NSS_CS_ENABLE(nss); SPI_WriteByte(READ);精心整理贞眉内容SPI_WriteByte(uint8_t)(ReadAddr&0 x010000)16);/*A1

16、6*/SPI_WriteByte(uint8_t)(ReadAddr&0 x00FF00)8);/*A15-A8*/SPI_WriteByte(uint8_t)(ReadAddr&0 x0000FF);/*A7-A0*/ /*Whilethereisdatatoberead*/while(NumByteToRead)*pBuffer=SPI_ReadByte();pBuffer+;NumByteToRead-;/*EnableAcknowledgementtobereadyforanotherreception*/ NSS_CS_DISABLE();SPI_Cmd(SPI1,D

17、ISABLE);/*wdz*/voidSPI_EE_BufferWrite2(u8*pBuffer,u32WriteAddr,u16NumByteToWrite)u32temp=WriteAddr+NumByteToWrite-1;u32number=WriteAddr+NumByteToWrite-1024*128; if(temp1024*128)SPI_EE_BufferWrite(pBuffer,WriteAddr,NumByteToWrite,1);一 一elseif(WriteAddr=1024*128)SPI_EE_BufferWrite(pBuffer,WriteAddr,Nu

18、mByteToWrite-number,1);SPI_EE_BufferWrite(pBuffer+NumByteToWrite-number,0,number,2);elseif(WriteAddr=1024*128) SPI_EE_BufferWrite(pBuffer,WriteAddr-1024*128,NumByteToWrite,2);voidSPI_EE_BufferRead2(u8*pBuffer,u32ReadAddr,u16NumByteToRead)I ru32temp=ReadAddr+NumByteToRead-1;u32number=ReadAddr+NumByteToRead-1024*128; if(temp1024*

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论