OpenEdv-开源电子网

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

新手学iic,卡了好几天,进度慢啊

[复制链接]

3

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2017-9-26
在线时间
9 小时
发表于 2017-9-26 20:26:01 | 显示全部楼层 |阅读模式
1金钱
u8 AT24CXX_Check(void)
{
u8 temp;
temp=AT24CXX_ReadOneByte(255)     
if(temp==0X55)return 0;     
else
{
  AT24CXX_WriteOneByte(255,0X55);
     temp=AT24CXX_ReadOneByte(255);   
  if(temp==0X55)return 0;
}
return 1;            
}
这个temp==0X55是啥啊,0X55有什么特殊含义吗?

最佳答案

查看完整内容[请看2#楼]

注释已经说得很清楚了。0x55只是一个数据,写在地址255处。目的是check的时候,发现读取255地址的数据是0x55,是正确的,就不再写了,都能读到正确的数据,说明check器件通过的。你可以把0x55的地方都换成别的值来验证。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

73

帖子

0

精华

高级会员

Rank: 4

积分
659
金钱
659
注册时间
2017-5-19
在线时间
146 小时
发表于 2017-9-26 20:26:02 | 显示全部楼层
注释已经说得很清楚了。0x55只是一个数据,写在地址255处。目的是check的时候,发现读取255地址的数据是0x55,是正确的,就不再写了,都能读到正确的数据,说明check器件通过的。你可以把0x55的地方都换成别的值来验证。
回复

使用道具 举报

6

主题

146

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1254
金钱
1254
注册时间
2016-11-30
在线时间
211 小时
发表于 2017-9-26 20:42:37 | 显示全部楼层
0X55只是一个地址而已,其中可写的的地址范围是0~255,在程序中写的地址为0x55,这个函数是用来检查0x55这个地址有没有写数据,是为了避免单片机开启重复在0X55这个地址里写数据
回复

使用道具 举报

13

主题

156

帖子

0

精华

高级会员

Rank: 4

积分
883
金钱
883
注册时间
2017-8-7
在线时间
200 小时
发表于 2017-9-27 09:35:20 | 显示全部楼层
同意三楼说法
回复

使用道具 举报

70

主题

6761

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13118
金钱
13118
注册时间
2012-11-26
在线时间
3813 小时
发表于 2017-9-27 10:20:07 | 显示全部楼层
没有特殊含义,就是一个标志而已,逻辑看不懂码? 上电开机读取255地址的数据,如果是0x55,则证明AT24CXX是正常的,否则向255地址写入0x55,再读出来,如果相等,则AT24CXX是正常的。否则AT24CXX是不存在,或者坏了
回复

使用道具 举报

5

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2017-9-26
在线时间
25 小时
发表于 2017-9-27 10:35:04 | 显示全部楼层
0x55 本身没有太大的含义,用其他的也可以(除了0x00 0xFF 要和变量初始化时的不一样),这段代码就是用来检查器件是否存在、读写是否正常的。
回复

使用道具 举报

14

主题

112

帖子

0

精华

高级会员

Rank: 4

积分
500
金钱
500
注册时间
2017-4-25
在线时间
110 小时
发表于 2017-9-27 10:44:33 | 显示全部楼层
IIC没什么,实际上就是帮你设计好车道,然后你在这个车道上走,(外加一个读写)
回复

使用道具 举报

10

主题

266

帖子

0

精华

高级会员

Rank: 4

积分
693
金钱
693
注册时间
2017-7-27
在线时间
98 小时
发表于 2017-9-27 19:53:34 | 显示全部楼层
还是先弄懂IIC协议先
回复

使用道具 举报

3

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2017-9-26
在线时间
9 小时
 楼主| 发表于 2017-9-28 10:53:17 | 显示全部楼层
liuliupiaoxue 发表于 2017-9-26 20:26
注释已经说得很清楚了。0x55只是一个数据,写在地址255处。目的是check的时候,发现读取255地址的数据是0x5 ...

嗯,懂了,多谢大侠
回复

使用道具 举报

3

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2017-9-26
在线时间
9 小时
 楼主| 发表于 2017-9-28 10:54:25 | 显示全部楼层
青春梦飞翔 发表于 2017-9-27 10:35
0x55 本身没有太大的含义,用其他的也可以(除了0x00 0xFF 要和变量初始化时的不一样),这段代码就是用来 ...

嗯,我试了,主要是看到0XA0有意义,还以为0X55也有什么功能呢
回复

使用道具 举报

3

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2017-9-26
在线时间
9 小时
 楼主| 发表于 2017-9-28 13:57:07 | 显示全部楼层
huanghan 发表于 2017-9-27 19:53
还是先弄懂IIC协议先

嗯,还有个问题需要您帮一下,就是应答问题,不是8位传输完后就有一个应答嘛,这个传输既可以是主到从,也可以是从到主,但是应答信号编程时候就已经确定不变了IIC_Wait_Ack();        ,它里面始终是SDA_IN();这个IN是指主机的输入还是从机的输入啊,
回复

使用道具 举报

3

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2017-9-26
在线时间
9 小时
 楼主| 发表于 2017-9-28 13:57:47 | 显示全部楼层
jermy_z 发表于 2017-9-27 10:20
没有特殊含义,就是一个标志而已,逻辑看不懂码? 上电开机读取255地址的数据,如果是0x55,则证明AT24CXX ...

嗯,还有个问题需要您帮一下,就是应答问题,不是8位传输完后就有一个应答嘛,这个传输既可以是主到从,也可以是从到主,但是应答信号编程时候就已经确定不变了IIC_Wait_Ack();        ,它里面始终是SDA_IN();这个IN是指主机的输入还是从机的输入啊,
回复

使用道具 举报

3

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2017-9-26
在线时间
9 小时
 楼主| 发表于 2017-9-28 13:58:02 | 显示全部楼层
jermy_z 发表于 2017-9-27 10:20
没有特殊含义,就是一个标志而已,逻辑看不懂码? 上电开机读取255地址的数据,如果是0x55,则证明AT24CXX ...

嗯,还有个问题需要您帮一下,就是应答问题,不是8位传输完后就有一个应答嘛,这个传输既可以是主到从,也可以是从到主,但是应答信号编程时候就已经确定不变了IIC_Wait_Ack();        ,它里面始终是SDA_IN();这个IN是指主机的输入还是从机的输入啊,
回复

使用道具 举报

3

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2017-9-26
在线时间
9 小时
 楼主| 发表于 2017-9-28 14:02:16 | 显示全部楼层
liuliupiaoxue 发表于 2017-9-26 20:26
注释已经说得很清楚了。0x55只是一个数据,写在地址255处。目的是check的时候,发现读取255地址的数据是0x5 ...

大侠,还有个问题,嗯,还有个问题需要您帮一下,就是应答问题,不是8位传输完后就有一个应答嘛,这个传输既可以是主到从,也可以是从到主,但是应答信号编程时候就已经确定不变了IIC_Wait_Ack();        ,它里面始终是SDA_IN();这个IN是指主机的输入还是从机的输入啊,
回复

使用道具 举报

2

主题

73

帖子

0

精华

高级会员

Rank: 4

积分
659
金钱
659
注册时间
2017-5-19
在线时间
146 小时
发表于 2017-9-28 15:50:49 | 显示全部楼层
烽烟愠梓 发表于 2017-9-28 14:02
大侠,还有个问题,嗯,还有个问题需要您帮一下,就是应答问题,不是8位传输完后就有一个应答嘛,这个传 ...

SDA_IN(),这句只是宏定义,配置主机STM32的SDA线为输入模式,为接收从机发应答信号准备。
简单来说就是你要输入信号给STM32,你得把IO配置成输入模式。
回复

使用道具 举报

3

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2017-9-26
在线时间
9 小时
 楼主| 发表于 2017-10-6 20:43:32 | 显示全部楼层
jermy_z 发表于 2017-9-27 10:20
没有特殊含义,就是一个标志而已,逻辑看不懂码? 上电开机读取255地址的数据,如果是0x55,则证明AT24CXX ...

那已经向255写入0x55了,再读出来还有可能不是0x55?能不能简单说明一下吗,谢谢大神
回复

使用道具 举报

3

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2017-9-26
在线时间
9 小时
 楼主| 发表于 2017-10-6 20:52:04 | 显示全部楼层
ZTO13 发表于 2017-9-27 10:44
IIC没什么,实际上就是帮你设计好车道,然后你在这个车道上走,(外加一个读写)

那已经向255写入0x55了,再读出来还有可能不是0x55?能不能简单说明一下吗,谢谢大神
回复

使用道具 举报

3

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2017-9-26
在线时间
9 小时
 楼主| 发表于 2017-10-6 20:52:17 | 显示全部楼层
青春梦飞翔 发表于 2017-9-27 10:35
0x55 本身没有太大的含义,用其他的也可以(除了0x00 0xFF 要和变量初始化时的不一样),这段代码就是用来 ...

那已经向255写入0x55了,再读出来还有可能不是0x55?能不能简单说明一下吗,谢谢大神
回复

使用道具 举报

3

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2017-9-26
在线时间
9 小时
 楼主| 发表于 2017-10-6 20:59:55 | 显示全部楼层
烽烟愠梓 发表于 2017-10-6 20:52
那已经向255写入0x55了,再读出来还有可能不是0x55?能不能简单说明一下吗,谢谢大神

这个程序的逻辑是则么回事啊?我就感觉这个程序根本就到达不了 return 1 啊,每次检测如果不是0x55不就进入else 了吗,else里边又一定是返回return 0 的,所以根本到达不了 return 1 啊?这样理解哪里出粗了?
回复

使用道具 举报

3

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2017-9-26
在线时间
9 小时
 楼主| 发表于 2017-10-6 21:00:16 | 显示全部楼层
烽烟愠梓 发表于 2017-10-6 20:52
那已经向255写入0x55了,再读出来还有可能不是0x55?能不能简单说明一下吗,谢谢大神

这个程序的逻辑是则么回事啊?我就感觉这个程序根本就到达不了 return 1 啊,每次检测如果不是0x55不就进入else 了吗,else里边又一定是返回return 0 的,所以根本到达不了 return 1 啊?这样理解哪里出粗了?
回复

使用道具 举报

3

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2017-9-26
在线时间
9 小时
 楼主| 发表于 2017-10-6 21:00:33 | 显示全部楼层
烽烟愠梓 发表于 2017-10-6 20:43
那已经向255写入0x55了,再读出来还有可能不是0x55?能不能简单说明一下吗,谢谢大神

这个程序的逻辑是则么回事啊?我就感觉这个程序根本就到达不了 return 1 啊,每次检测如果不是0x55不就进入else 了吗,else里边又一定是返回return 0 的,所以根本到达不了 return 1 啊?这样理解哪里出粗了?
回复

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2017-9-4
在线时间
17 小时
发表于 2017-10-12 10:28:14 | 显示全部楼层
MrXiong 发表于 2017-9-26 20:42
0X55只是一个地址而已,其中可写的的地址范围是0~255,在程序中写的地址为0x55,这个函数是用来检查0x55这 ...

0x55应该是一个校准位吧 应该是一个值
回复

使用道具 举报

6

主题

146

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1254
金钱
1254
注册时间
2016-11-30
在线时间
211 小时
发表于 2017-10-13 08:54:11 | 显示全部楼层
大兴 发表于 2017-10-12 10:28
0x55应该是一个校准位吧 应该是一个值

是的,我弄错了,0X55是一个数据,用来防止重启重复写数据,谢谢指错。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 14:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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