版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年保育师四级(中级)资格考试理论知识全真模拟考试卷及答案(共七套)
- 2026年软件测试招聘题库及答案
- 2026年校招:广州轻工集团试题及答案
- 2026年驾考科目三夜间驾驶技巧解析课件
- 2026年校招:辽宁咨询产业集团试题及答案
- 2026年创业投资技巧实战模拟题库
- 杭州萧山 2026 年制衣厂平车车工入厂规章制度试卷 招聘 52 人
- 2026年零碳工厂高级咨询师招聘笔试试卷 招录9人题库大全
- 2026年运动控制高级研发工程师招聘笔试试卷 招录11人大全
- 2026年保育员五级职业技能考试题库(含答案)
- 2026年产前筛查和产前诊断试题
- 2026年高邮市消防系统事业单位公开招聘工作人员3人笔试备考题库及答案解析
- 2025年河南省检察官逐级遴选笔试题目及答案
- 《勤洗生活衣物》教学设计-2026-2027学年滇教版初中劳动技术七年级上册
- 注册消防工程师继续教育2025年部分题目与答案(126题)
- 2026年江苏省徐州市中考英语真题(含答案)
- 2026年东阳市城管辅助人员招聘真题(附答案)
- 肉联厂屠宰人员安全防护手册
- 2026年度湖北省部分工程高、中级职称水平能力测试(轻工)复习题及答案
- AQ3035-2010危险化学品重大危险源安全监控技术规范关键条款解读
- T∕CHCIA 013-2023 液体香氛规范
评论
0/150
提交评论