今天的主要任务是阅读代码,印象最深刻的收获就是看懂了 I2C 总线的协议:当时资料上的总结如下:
1、I2C总线是一种只使用两根线进行
通信的机制,一根线输入时钟SCK,一根线传输数据或是地址 SDA
2、I2C协议规定,每次传输的数据都是8位的,并且必须在数据/ 地址线空闲的时候传输(空闲我理解为低电平!)
3、I2C协议规定,当SCK为高电平的时候,数据 /地址线无法传输数据,当SDA下降沿的时候,作为数据传输的起始信号;当SDA上升沿的时候,作为数据传输的停止信号!
4、I2C协议规定,每传输完一个字节的数据,接收器都必须要发送一个应答信号。作为应答器的一方要在第九个时钟周期将SDA信号拉低。(但是,当主器件作为应答方的时候,有时候可以不发送应答信号,但是在比如连续接收的时候,还是要的)
这样一来,就可以推测出I2C数据收发的一些通用的代码了,如下:
I2C数据接收代码:
Read_byte(){
unsigned char i,k;
SCK = 0;
delay();//空操作
SDA = 1;
delay();
for(i = 0; i < 8; i++){
SCK = 1;
delay();
k = (k<<1) | SDA;
delay();
SCK = 0;
delay();
}
}
I2C数据发送代码
Write_type(unsigned char data){
unsigned char tempData;
tempData = data;
for(i = 0; i < 8; i++){
tempData = tempData<<1;
SCK = 0;
delay();
ADS = CY;//CY是移位后,被移除的那一位
delay();
SCK = 1;
delay();
}
}
这其中,空操作的目的是让数据线和时钟信号线上的电平信号稳定。在这里没有考虑应答信号,这只是一个读/写操作,并不是完整的数据传输流程,但是对于单字节的读/ 写,应该可以在功能上满足。
除此之外,就是读了其他的芯片如24C08,74HC595等的芯片说明书。怎么说呢,感觉还是没有把握到阅读芯片说明书的要诀!主要是参照实际编写的代码,对说明书有了一个印象。只是这些说明书都是中文的,感觉上编写的时候都比较匆忙!对于一些细节上的东西还是写的不是很清楚,另外还有一些是经验性的描述。但是不管怎么说,今天还是很有收获的,希望日后能够不断进步!
PS:本人现在大三,在嵌入式领域只能算是一个刚刚看见门槛的小学生,上面的写的东西大部分是我看的资料,也有一些是我的想法。如果您不小心点开了,又不幸看完了,那么我还真是感激不尽!当然,如果您愿意留下只言片语,或是交流,或是指正,鄙人更是感激万分!
末学后进在这里,希望与大家一起进步,成长!
1