OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7821|回复: 16

STM32 24C512疑问

[复制链接]

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2014-4-1
在线时间
0 小时
发表于 2014-4-16 16:34:48 | 显示全部楼层 |阅读模式
请问原子哥,例程里面的IIC程序能不能测通24C512,我将   #define EE_TYPE AT24C512  进行了宏定义65535,但是检测的时候,不能检测到。

好多不会,真为智商着急。。。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2014-4-1
在线时间
0 小时
 楼主| 发表于 2014-4-16 16:37:16 | 显示全部楼层
[mw_shl_code=c,true]#define AT24C01 127 #define AT24C02 255 #define AT24C04 511 #define AT24C08 1023 #define AT24C16 2047 #define AT24C32 4095 #define AT24C64 8191 #define AT24C128 16383 #define AT24C256 32767 #define AT24C512 65535 //Mini STM32??·?°?????????24c02???ù???¨??EE_TYPE??AT24C02 #define EE_TYPE AT24C512[/mw_shl_code]
其他的地方没有改动。
好多不会,真为智商着急。。。
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-4-16 16:43:50 | 显示全部楼层
回复【2楼】柴柳青:
---------------------------------
1、原子哥那个是24c02的,其他的没测试过,不行也是纯属正常的
2、你可以参考一下数据手册进行修改程序达到你的目的
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2014-4-1
在线时间
0 小时
 楼主| 发表于 2014-4-16 16:47:21 | 显示全部楼层
回复【3楼】Badu_Space:
---------------------------------
在网上找到的都是应用手册,还有英文的数据手册,看不懂。。。。。
好多不会,真为智商着急。。。
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-4-16 16:51:51 | 显示全部楼层
用我这个试下,我这个代码测过24C02和24C32这两个芯片的,其他的没测试,你可以完善一下

24cxx.zip

5.58 KB, 下载次数: 819

iic.zip

2.7 KB, 下载次数: 741

现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-4-16 16:52:27 | 显示全部楼层
回复【4楼】柴柳青:
---------------------------------
搞个翻译软件在电脑上面装着就行啦
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2014-4-1
在线时间
0 小时
 楼主| 发表于 2014-4-16 16:57:12 | 显示全部楼层
回复【5楼】Badu_Space:
---------------------------------
谢谢你,我试试。
好多不会,真为智商着急。。。
回复 支持 反对

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2014-4-1
在线时间
0 小时
 楼主| 发表于 2014-4-17 08:08:34 | 显示全部楼层
回复【6楼】Badu_Space:
------------------------------
老师能把你的IIC程序发过来看看吗。
好多不会,真为智商着急。。。
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-4-17 08:18:48 | 显示全部楼层
回复【8楼】柴柳青:
---------------------------------
见4楼附件
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2014-4-1
在线时间
0 小时
 楼主| 发表于 2014-4-17 08:25:51 | 显示全部楼层
回复【9楼】Badu_Space:
---------------------------------
谢谢!
好多不会,真为智商着急。。。
回复 支持 反对

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2014-4-1
在线时间
0 小时
 楼主| 发表于 2014-4-17 10:08:31 | 显示全部楼层
[mw_shl_code=c,true]u8 EEPROM_Check(u16 driveaddr) { u8 test_value = 0; test_value = EEPROM_Read_Byte(driveaddr, 0x0); //?×???????????????·?????????? if(test_value == Check_Data) //??????×??????ì??×???????EEPROM { return 0; //?è±????? } else { //EEPROM????????????????????×÷ test_value = 0; EEPROM_Write_Byte(driveaddr, 0x0, Check_Data); //?òEEPROM?????????·????????0x55 for(test_value = 0;test_value < 250;test_value++) {} //???±???¨?±???????? test_value = EEPROM_Read_Byte(driveaddr, 0x0); //?????????????????·?????????? if(test_value != Check_Data) return 1; //?÷???í?ó???????ò???????? } return 0; //EEPROM???? } 这个可以用来检测24C512吗?[/mw_shl_code]

好多不会,真为智商着急。。。
回复 支持 反对

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2014-4-1
在线时间
0 小时
 楼主| 发表于 2014-4-17 10:09:14 | 显示全部楼层
回复【9楼】Badu_Space:
---------------------------------
u8 EEPROM_Check(u16 driveaddr)
{
u8 test_value = 0;

test_value = EEPROM_Read_Byte(driveaddr, 0x0); //?×???????????????·??????????
if(test_value == Check_Data) //??????×??????ì??×???????EEPROM
{
return 0; //?è±?????
}
else
{ //EEPROM????????????????????×÷
test_value = 0;
EEPROM_Write_Byte(driveaddr, 0x0, Check_Data); //?òEEPROM?????????·????????0x55
for(test_value = 0;test_value < 250;test_value++) {} //???±???¨?±????????
test_value = EEPROM_Read_Byte(driveaddr, 0x0); //?????????????????·??????????

if(test_value != Check_Data) return 1; //?÷???í?ó???????ò????????
}
return 0; //EEPROM????
}
这个可以用来检测24C512吗
好多不会,真为智商着急。。。
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-4-17 11:30:44 | 显示全部楼层
回复【12楼】柴柳青:
---------------------------------
是的,检测它看是不是在总线上的

怎么啦,这里过不去?
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2014-4-1
在线时间
0 小时
 楼主| 发表于 2014-4-17 14:11:49 | 显示全部楼层
回复【13楼】Badu_Space:
---------------------------------
通了。老师看看我的分页函数,我没有用您的。
//分页写数据
[mw_shl_code=c,true]unsigned char I2C_Write_Eeprom( unsigned int Page, unsigned char offset, unsigned char *IIC_Buf, unsigned char Len ) { //union B16_B08 Addr; unsigned char xDevi_Addr,result; unsigned char BufA[PAGE_SIZE]; unsigned char h, n; // Addr.B16=Page*PAGE_SIZE+offset; if( Page == 0x8025 ) xDevi_Addr = 0x64; else xDevi_Addr = 0xa0; if( (Page >= 0x200) && (Page != 0x8025) ) return 1; h = Len; memcpy( BufA, IIC_Buf, Len ); if( (offset+h)>AGE_SIZE ) return 1; // IIC_Start();//开始 if( Page == 0x8025 ) //时钟芯片 { result = IIC_Write_Byte( xDevi_Addr ); //发送器件地址 if( result == 0 ) return 2; //failure. result = IIC_Write_Byte( offset ); //发送子地址 if( result == 0 ) return 2; //failure. for(n=0;n<h;n++) { result=IIC_Write_Byte(BufA[n]); if(result==0) return 3; } } else { EEPROM_Write_nByte(xDevi_Addr,Page*PAGE_SIZE+offset,IIC_Buf,Len); //函数内部没有动[/mw_shl_code] [mw_shl_code=c,true]} IIC_Stop(); return 0;//ok } //分页读数据 unsigned char I2C_Read_Eeprom( unsigned int Page, unsigned char offset, unsigned char *IIC_Buf, unsigned char Len ) { unsigned char h, n, result,xDevi_Addr; unsigned char BufA[PAGE_SIZE]; h = Len; if( Page >< 0x0a ) h = h + 2; // if( (offset+h)>AGE_SIZE ) return 1; //地址溢出 if( (Page >= 0x200) && (Page != 0x8025) ) return 1; //地址溢出 if( Page == 0x8025 ) xDevi_Addr = 0x64; else xDevi_Addr = 0xa0; memcpy( BufA, IIC_Buf, Len ); IIC_Start();//开始 if( Page == 0x8025 ) //时钟芯片 { result = IIC_Write_Byte( xDevi_Addr ); //发送器件地址 if( result == 0 ) return 2; //failure. result = IIC_Write_Byte( offset ); //发送子地址 if( result == 0 ) return 2; //failure. for(n=0;n<h;n++) { BufA[n]=IIC_Read_Byte(); if(n == (h - 1)) IIC_Ack(0x01); // else IIC_Ack(0x00); // } } else //24C512 { EEPROM_Read_Page(xDevi_Addr,Page*PAGE_SIZE+offset,IIC_Buf,Len); //函数内部没动 } IIC_Stop(); return 0;//ok }>[/mw_shl_code]


好多不会,真为智商着急。。。
回复 支持 反对

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2014-4-1
在线时间
0 小时
 楼主| 发表于 2014-4-17 14:14:17 | 显示全部楼层
回复【14楼】柴柳青:
---------------------------------
PAGE_SIZE=64;
子地址=Page*PAGE_SIZE+offset
子地址=页数*64+偏移量
这是想用时钟芯片和512共同使用IIC
好多不会,真为智商着急。。。
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-4-17 15:02:20 | 显示全部楼层
回复【15楼】柴柳青:
---------------------------------
IIC底层驱动可以共用呀,但是建议还是512和时钟芯片分开读取,合在一起要很多的判断条件,麻烦
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2014-4-1
在线时间
0 小时
 楼主| 发表于 2014-4-17 15:16:50 | 显示全部楼层
回复【16楼】Badu_Space:
---------------------------------
知道了,谢谢!
好多不会,真为智商着急。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-10 03:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表