我最近接到了为我们产品中的一些 I2C 设备编写驱动程序的任务。在这方面我是一个完整的初学者,但我已经设法混合使用并i2cset
控制一些 LED。i2cget
smbus
我最近的任务是从Atmel ATSHA204芯片的 EEPROM 中读取一个 7 字节的序列号。我的第一项工作是唤醒芯片。数据表说这是按如下方式完成的
唤醒条件要求系统处理器手动将 SDA 引脚驱动为低电平持续 tWLO,或者以足够慢的时钟速率传输 0x00 数据字节,以使 SDA 在最短 tWLO 周期内为低电平。当设备唤醒时,正常的处理器 I2C 硬件和/或软件可用于设备通信,直至并包括将设备重新置于低功耗(睡眠)模式所需的 I/O 序列。
因此,似乎我必须手动将其中一个 I2C 引脚设置为低 tWLO 时间,这显然至少需要 60 微秒才能使用传统的 I2C 调用。我真的不确定这是如何完成的,理想情况下我会这样做C
,那么以下工作的一些变化会是什么?
int file;
file = open("/dev/i2c-0", O_RDWR);
if (file < 0)
{
exit(1);
}
int addr = 0x64; // Address of LED driver
if (ioctl(file, I2C_SLAVE, addr) < 0)
{
return 1;
}
write(file, 0x00, 1); // write a 0x00 to the chip to wake it up
我想我不确定最后一点,在设备唤醒之前如何继续写?我将不胜感激,因为像这样的低级编程对我来说是新的。