完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
只能写入6个字节,7与8字节写不进
uint32_t EEPROM_PageWrite(uint8_t u8Addr, uint8_t *pu8Buf) { int32_t i32Err; int32_t i,k; k=0; do { k++; i32Err = 0; /* Send start */ _I2C_START(I2C0); _I2C_WAIT_READY(I2C0); /* Send control byte */ _I2C_WRITE(I2C0, EEPROM_WRITE_ADDR); _I2C_WAIT_READY(I2C0); if(I2C0->I2CSTATUS == 0x18) { { /* ACK */ /* Send low address */ _I2C_WRITE(I2C0, u8Addr); //address _I2C_WAIT_READY(I2C0); if(I2C0->I2CSTATUS == 0x28) { /* ACK */ for(i=0;i<8;i++) { /* Send data */ if(I2C0->I2CSTATUS == 0x28) { _I2C_WRITE(I2C0, pu8Buf[i]); // data _I2C_WAIT_READY(I2C0); if(I2C0->I2CSTATUS == 0x30) { /* NACK */ /* Send data error */ i32Err = 3; } } else i32Err = 1; } if(I2C0->I2CSTATUS == 0x28) { /* ACK */ /* Send stop */ _I2C_STOP(I2C0); } else { /* NACK */ /* Send data error */ i32Err = 4; } } else { /* NACK */ /* Send low address error */ i32Err = 2; } } } else { /* NACK */ /* Send control error */ i32Err = 1; } if(i32Err) { /* Send stop */ _I2C_STOP(I2C0); } Delay(200); }while(i32Err (k<4)); return(i32Err); } |
|
相关推荐
1个回答
|
|
根据给出的代码和描述,可以推测at24c02是一个2KB的串行EEPROM芯片,其页写入大小为8个字节。
在代码中,通过循环将输入数据写入EEPROM的一页中(每页包含8个字节)。代码中的变量k用于计数已写入的字节数,初始值为0。 根据代码逻辑,只有当已写入的字节数小于8时,才会执行写入操作。因此,只有在每页的前6个字节已写入后,才会继续写入第7和第8个字节。如果已写入的字节数达到或超过8,循环将退出,不再执行写入。 如果您想写入7或8个字节,请确保输入数据指针指向包含所需字节数的缓冲区,并在调用EEPROM_PageWrite函数之前更新u8Addr变量以指向适当的EEPROM地址。确保您的代码仍然遵循循环的逻辑,以便正确处理字节超过6的情况。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
205 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1253 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
848 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
853 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
1073 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12009 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 12:55 , Processed in 0.633881 second(s), Total 71, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号