版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1. 芯片访问规那么符合 AT25 系列原那么,可以找相关的例子,但是25M01 目前没有2.芯片工作原那么,不考虑写保护问题,所有操作的第一步都是要发送写允许指令,然后重新 片选有效,发送下一步的命令。注意问题:SPI的EEPROM的数据输出的原理是,在输入一个字节的同时输出一个字节,没 有输入字节,就输出,所以,所谓的读数据,其实质是先发送一个数据,然后在接收一个数 据。操作如下:(1) 存放器读1) 先片选,在发送写允许指令,片选无效2) 片选,发送读存放器指令,读存放器,片选无效(2) 存放器写1) 先片选,在发送写允许指令,片选无效2) 片选,发送写存放器指令,写数据,片选无效(3)
2、 写数据1) 先片选,在发送写允许指令,片选无效2) 片选,发送写数据指令,写数据,片选无效(4) 读数据1) 先片选,在发送写允许指令,片选无效2) 片选,发送读数据指令,读数据,片选无效注意:STM32的SPI需要,每次都开启void SPI_EEPROM_Init(void)SPI_InitTypeDef SPI_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;/* Enable SPI1 and GPIO clocks */*! SPI_FLASH_SPI_CS_GPIO, SPI_FLASH_SPI_MOSI_GPIO, SPI_F
3、LASH_SPI_MISO_GPIO, SPI_FLASH_SPI_DETECT_GPIO and SPI_FLASH_SPI_SCK_GPIO Periph clock enable */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC|RCC_APB2Periph_ AFIO, ENABLE);/*! SPI_FLASH_SPI Periph clock enable */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);/*! Configure SPI
4、_FLASH_SPI pins: SCK */GPIO_InitStructure.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);/*! Configure SPI_FLASH_SPI pins: MOSI */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;GPIO_Init(GPIOA, &GP
5、IO_InitStructure);/*! Configure SPI_FLASH_SPI pins: 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)return 0;if(addr=(uint32_t)(1024*128) addr=addr-(uint32_t)(1024*128
6、);nss=2; else nss=1;SPI_Cmd(SPI1,ENABLE);AT25_WaitReady(nss);SPI_WREN(nss);NSS_CS_ENABLE(nss);SPI_WriteByte(READ);SPI_WriteByte(uint8_t)(addr & 0x010000)16);/* A16*/SPI_WriteByte(uint8_t)(addr & 0x00FF00)8);/* A15-A8*/ SPI_WriteByte(uint8_t)(addr & 0x0000FF);/* A7-A0*/tmp = SPI_ReadByte();NSS_CS_DIS
7、ABLE( );SPI_Cmd(SPI1,DISABLE);return tmp;void AT25_WriteByte(uint8_t data, uint32_t addr)uint8_t nss=1;uint32_t tt=1024*128*2;if(addr = tt)return ;if(addr=(uint32_t)(1024*128) addr=addr-(uint32_t)(1024*128);nss=2; else nss=1;SPI_Cmd(SPI1,ENABLE);AT25_WaitReady(nss);SPI_WREN(nss);NSS_CS_ENABLE(nss);S
8、PI_WriteByte(WRITE);SPI_WriteByte(uint8_t)(addr & 0x010000)16);/* A16*/SPI_WriteByte(uint8_t)(addr & 0x00FF00)8);/* A15-A8*/SPI_WriteByte(uint8_t)(addr & 0x0000FF);/* A7-A0*/ SPI_WriteByte(data);NSS_CS_DISABLE( );SPI_Cmd(SPI1,DISABLE);/ 多字节操作/* brief将缓冲区中的数据写到I2C EEPROM中* param* arg pBuffer:缓冲区指针* a
9、rg WriteAddr: 写地址* arg NumByteToWrite: 写的字节数* retval 无*/void SPI_EE_BufferWrite(u8* pBuffer, u32 WriteAddr, u16 NumByteToWrite,uint8_t NSS)u32 NumOfPage = 0, NumOfSingle = 0, Addr = 0, count = 0;Addr = WriteAddr % I2C_PageSize;count = I2C_PageSize - Addr;NumOfPage = NumByteToWrite / I2C_PageSize;Num
10、OfSingle = NumByteToWrite % I2C_PageSize;/* If WriteAddr is I2C_PageSize aligned */if(Addr = 0)/* If NumByteToWrite I2C_PageSize */elsewhile(NumOfPage-)SPI_EE_PageWrite(pBuffer, WriteAddr, I2C_PageSize,NSS);WriteAddr += I2C_PageSize;pBuffer += I2C_PageSize;if(NumOfSingle!=0)SPI_EE_PageWrite(pBuffer,
11、 WriteAddr, NumOfSingle,NSS);/* If WriteAddr is not I2C_PageSize aligned */else/* If NumByteToWrite I2C_PageSize */elseNumByteToWrite -= count;NumOfPage = NumByteToWrite / I2C_PageSize;NumOfSingle = NumByteToWrite % I2C_PageSize; if(count != 0)SPI_EE_PageWrite(pBuffer, WriteAddr, count,NSS);WriteAdd
12、r += count;pBuffer += count;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); /* brief 在EEPROM的一个写循环中可以写多个字节,但一次写入的字节数* 不能超过EEPROM页的大小,AT24C02每页有8个字节*
13、param* arg pBuffer: 缓冲区指针* arg WriteAddr: 写地址* arg NumByteToWrite: 写的字节数* retval 无*/ void SPI_EE_PageWrite(u8* pBuffer, u32 WriteAddr, u16 NumByteToWrite,uint8_t NSS) SPI_Cmd(SPI1,ENABLE); AT25_WaitReady(NSS);SPI_WREN(NSS);NSS_CS_ENABLE(NSS); SPI_WriteByte(WRITE);SPI_WriteByte(uint8_t)(WriteAddr & 0
14、x010000)16);/* A16*/SPI_WriteByte(uint8_t)(WriteAddr & 0x00FF00)8);/* A15-A8*/ SPI_WriteByte(uint8_t)(WriteAddr & 0x0000FF);/* A7-A0*/* While there is data to be written */ while(NumByteToWrite-)/* Send the current byte */SPI_WriteByte(*pBuffer);/* Point to the next byte to be written */ pBuffer+;/*
15、 Send STOP condition */ NSS_CS_DISABLE();SPI_Cmd(SPI1,DISABLE); /* brief 从EEPROM里面读取一块数据* param* arg pBuffer:存放从EEPROMI读取的数据的缓冲区指针* arg WriteAddr:接收数据的 EEPROM的地址* arg NumByteToWrite:要从 EEPROM读取的字节数* retval 无*/void SPI_EE_BufferRead(u8* pBuffer, u32 ReadAddr, u16 NumByteToRead,uint8_t NSS) uint8_t ns
16、s=NSS;SPI_Cmd(SPI1,ENABLE);AT25_WaitReady(nss);SPI_WREN(NSS);NSS_CS_ENABLE(nss);SPI_WriteByte(READ);SPI_WriteByte(uint8_t)(ReadAddr & 0x010000)16);/* A16*/SPI_WriteByte(uint8_t)(ReadAddr & 0x00FF00)8);/* A15-A8*/ SPI_WriteByte(uint8_t)(ReadAddr & 0x0000FF);/* A7-A0*/* While there is data to be read
17、*/while(NumByteToRead)*pBuffer = SPI_ReadByte(); pBuffer+;NumByteToRead-;/* Enable Acknowledgement to be ready for another reception */NSS_CS_DISABLE( );SPI_Cmd(SPI1,DISABLE);/*wdz*/void SPI_EE_BufferWrite2(u8* pBuffer, u32 WriteAddr, u16 NumByteToWrite)u32 temp=WriteAddr+NumByteToWrite-1;u32 number
18、=WriteAddr+NumByteToWrite-1024*128; if(temp1024*128)SPI_EE_BufferWrite(pBuffer,WriteAddr,NumByteToWrite,1);else if(WriteAddr=1024*128)SPI_EE_BufferWrite(pBuffer,WriteAddr,NumByteToWrite-number,1); SPI_EE_BufferWrite(pBuffer+NumByteToWrite-number,0,number,2);else if(WriteAddr=1024*128)SPI_EE_BufferWrite(pBuffer,WriteAddr-1024*128,NumByteToWrite,2);void SPI_EE_BufferRead2(u8* pBuffer, u32 ReadAddr, u16 NumByteToRead)u32 temp=ReadAddr+NumByteToRead-1;u32 number=Rea
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年云南省祥云县中考物理最后一模试卷含解析
- 重庆一中学2026届中考四模物理试题含解析
- 上、下水库土建及金属结构安装工程投资计划明细表
- 四川省遂宁城区五校联考2026届中考物理押题试卷含解析
- 2026届江苏省苏州吴江市青云中学中考物理对点突破模拟试卷含解析
- ICU危重病人抢救护理
- 内蒙古鄂托克旗乌兰镇中学2026年中考一模物理试题含解析
- 常州市天宁区2025届数学三下期中质量检测模拟试题(含解析)
- 2026届四川省成都市温江县中考物理模拟预测试卷含解析
- 航空人员资格理论考试复习题库(附答案)
- 2026年湖南省政工专业职称考试(中国近现代史)练习试题及答案
- 2026年云南交投集团曲靖管理处分公司收费员等岗位招聘(招募)(140人)考试备考试题及答案解析
- 2026年天津市公安医院医护人员招聘笔试备考试题及答案解析
- 2026年人教版四年级语文下册期末考试题及答案
- 2026年中国兵器审计中心(西安中心)招聘(5人)笔试备考题库及答案解析
- 2024-2025学年广东省五校高一下学期期末联考化学试题含答案
- 2026年中考生物会考全四册核心知识点梳理
- 2026中国焦糖色素市场营销前景展望及投资价值创新性研究报告
- 青海中考:政治高频考点
- 2025年东南大学强基计划招生数学试卷试题真题(含答案详解)
- 危险性较大工程验收表(共18张表)
评论
0/150
提交评论