當我們調試I2C的時候,有時候我們並不清楚,I2C協議有沒有正常工作,藉助示波器,我們可以很直觀的看到通過I2C協議發出數據。所以掌握示波器對I2C進行解碼也是很重要的,這裏我使用的是 SIGLENT 公司的示波器,型號爲 SDS 1202X,支持I2C,SPI解碼等。
一.用示波器解碼I2C的相關代碼
主函數代碼
int main(void)
{
u8 read;
//初始化延時函數
delay_init(168);
//初始化串口
usart_init(115200);
//初始化24c02
Init_24c02();
while(1)
{
sendOneByte(0x00,0x20);
read=receiveOneByte(0x00);
USART_SendData(USART1,read);
delay_ms(1000);
}
}
24c02實現讀寫的代碼
void Init_24c02()
{
IIC_init();
}
//發送一個字節的數據
void sendOneByte(u8 Adddr_send, u8 data_send)
{
IIC_start();
IIC_Send_Byte(0xA0);
IIC_Wait_Ack();
IIC_Send_Byte(Adddr_send);
IIC_Wait_Ack();
IIC_Send_Byte(data_send);
IIC_Wait_Ack();
IIC_stop();
delay_ms(10);
}
//接收一個字節的數據
u8 receiveOneByte(u8 Addr_receive)
{
u8 receive=0;
IIC_start();
IIC_Send_Byte(0xA0);
IIC_Wait_Ack();
IIC_Send_Byte(Addr_receive);
IIC_Wait_Ack();
IIC_start();
IIC_Send_Byte(0xA1);
IIC_Wait_Ack();
receive=IIC_Read_Byte(0);
IIC_stop();
return receive;
}
二.示波器的使用
1.先設置解碼參數,點擊右邊的decode,屏幕下方就會出現幾個選項,選擇串行總線1,IIC解碼,信號源設置(設置CH1爲SCK,CH2爲SDA),地址7位,指得是設備地址,顯示開啓(可以看到解碼出來的數據)
2.設置解碼觸發
點擊下圖中的觸發設置
選擇總線1(與之前選的解碼總線保持一致),觸發條件爲開始條件
方法一,此時若要捕捉,可以先按解碼,然後按觸發中的normal,然後上電,若操作正常,應能捕捉的到(本程序是一直循環,方便捕捉)
方法二:在已上完電的情況下,點擊auto,左右旋轉Horizontal鍵,找到適當的地方(可以看到數據在傳輸),點擊normal,也可以解碼觸發
這樣就可以在示波器上,看到解碼的I2C數據