I2C 抓包
PicoXTools I2C调试助手全新升级,新增I2C总线抓包功能!
C
#define BTN_UP_12 12
#define BTN_DOWN_23 23
#define CTRL_C 3
#define EV_DATA 0
#define EV_START 1
#define EV_STOP 3
int main(){
i2c_sniffer_init();
int i = 0;
int nNum = 0;
int buff[32];
while(1){
nNum = i2c_sniffer_peek();
if(nNum <=0){
sleep_ms_v(100);
if (getchar_timeout_us(0) == CTRL_C){
i2c_sniffer_deinit();
return 0;
}
continue;
}
nNum = i2c_sniffer_read((int)&buff[0],32*4,0);
for(i=0;i<nNum/4;i++){
int msg = buff[i];
/*
第1字节为数据或 I2C 地址
第3字节
bit0 ACK;
bit1 R/W;
bit[2-7] 消息类型;
*/
int Byte3= msg >> 24;
int data = msg &0xff;
int type = Byte3 >>6;
int RW = Byte3&0x2?1:0;
int ACK = Byte3&0x1?1:0;
if(type == EV_START){
printf("\r\n\033[31mS\033[39m\033[34m%02x\033[39m%s%s :",data,RW?"R":"W",ACK?"N":"\033[32mA\033[39m");
}else if(type == EV_DATA){
printf("%02x ",data);
}else if(type == EV_STOP){
printf("P");
}
}
}
return 0;
}