概述
I2C client 挂到 adapter之后,就可以通过I2C 读写命令开始 读写设备寄存器了。
读写的时候,都可以用示波器量出来I2C CLK 和I2C data信号的,甚至可以读出 data信号上的,传输的设备地址和数据。
有趣的是,开始的时候,把示波器信号周期调的比较大,比如500ms,这时候,测量音频Codec I2C总线上信号,居然量不到信号,而点触摸屏的时候就可以测到I2C 总线上有数据波动。(好多设备都是连载同一条I2C总线上的)。 后来才发现原来的把示波器周期调小到us级,改用触发方式,就可以捕捉到I2C设备上的信号了。
具体做法,可以添加以下代码,生成sys/class/i2c-adapter/* 下面的节点reg和val 。
reg --- 要读写的 I2C 设备寄存器地址
val --- reg里面的值
static unsigned long sys_reg;
static ssize_t sys_reg_show(struct device *dev,
struct device_attribute * attr,char * buf)
{
printk(" reg show : sys_reg = %dn", sys_reg);
return snprintf(buf,PAGE_SIZE, "%x", (u32)sys_reg);
}
static ssize_t sys_reg_store(struct device *dev,
struct device_attribute *attr, const char * buf,size_t size)
{
strict_strtoul(buf, 16, &sys_reg);
printk(" reg store : sys_reg = %dn", sys_reg);
return size;
}
static ssize_t sys_val_show(struct device *dev,
struct device_attribute *attr, char *buf)
{
unsigned char val;
// struct i2c_client *client;
val = 0;
// client = container_of(dev, struct i2c_client, dev);
val = lc1120_i2c_read(sys_reg);
printk(" sys_val_show : val = %dn", val);
return snprintf(buf, PAGE_SIZE, "%x", val);
}
static ssize_t sys_val_store(struct device *dev,
struct device_attribute *attr, const char *buf, size_t size)
{
unsigned long val = 0;
printk(" sys_val_store : before : buf = %sn", buf);
if (strict_strtoul(buf, 16, &val) == 0)
{
// struct i2c_client *client;
// client = container_of(dev, struct i2c_client, dev);
printk(" sys_val_store : sys_reg = %dn", sys_reg);
printk(" sys_val_store : before :val = %dn", val);
lc1120_i2c_write(val, sys_reg);
}
printk(" sys_val_store : after :val = %dn", val);
return size;
}
static DEVICE_ATTR(reg, S_IRUGO | S_IWUGO, sys_reg_show, sys_reg_store);
static DEVICE_ATTR(val, S_IRUGO | S_IWUGO, sys_val_show, sys_val_store);
下面这些在初始化中添加
这样,读写reg 就是选定设备寄存器地址,if (device_create_file(&client->dev, &dev_attr_reg)) printk(KERN_ERR "%s create sysfs reg failedn", __func__); if (device_create_file(&client->dev, &dev_attr_val)) printk(KERN_ERR "%s create sysfs val failedn", __func__);
读写val,就是进行I2C读写操作,可以产生波形了。
最后
以上就是勤劳天空为你收集整理的用示波器量I2C 信号的全部内容,希望文章能够帮你解决用示波器量I2C 信号所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复