查看PCA9685 python库的源代码,我确实看到了一个名为i2c_bus
的I2C
实例被传入,以创建PCA9685
类。i2c_bus
变量用于创建I2CDevice
(I2CDevice的源代码(的实例。但后来我迷失了方向。在某个时刻,这个PWM驱动器应该调用I2CDevice
类的写入方法。但这种事从来没有发生过!(FAFAIK(。我还检查了PWMChannel
类和PCAChannels
类,但都没有做与i2c相关的事情。然后我检查了pca9685_sCompletest.py文件,看到了以下代码:
# Set the PWM duty cycle for channel zero to 50%. duty_cycle is 16 bits to match other PWM objects
# but the PCA9685 will only actually give 12 bits of resolution.
pca.channels[0].duty_cycle = 0x7FFF
这肯定会导致I2C总线上发生一些IO。但是,对于某些i2c总线或设备,没有write
方法!在我看来,它几乎像DMA
我肯定找了一个小时了,我一定忽略了什么。
PCA9685类将数据写入I2C总线的机制是什么?
它是UnaryStruct
和StructArray
类。这些是从adafruit_register.i2c_struct
和adafruit_register.i2c_struct_array
导入的。当您写入UnaryStruct
类的对象时,它会生成一个单字节的I2C写入。当您向StructArray
写入时,它会生成更大的I2C写入。
非常聪明,但它确实隐藏了实现。