i2cdevice python
Version 1.0.0
I2CDEVICE是一个Python框架,旨在处理常见的SMBUS/I2C设备交互模式。
该项目旨在使I2C设备的Python库的组合实现更加容易,更简单,固有的自我记录。
它通过将硬件寄存器的详细描述以及应如何操纵为结构化的定义语言来做到这一点。
该项目并非旨在帮助您为Python设备建立公共API,该设备应建立在此处介绍的基本面之上。
通常,即使您不打算使用所有功能,您也应该以1:1表示要实现的设备中的硬件寄存器。实施完整的寄存器集可以在将来轻松添加新功能。
查看下面列出的库中的真实示例。
512ms )到注册值(例如0b111 )然后返回的价值翻译get读取寄存器set编写多个寄存器字段下面的示例在LTR559上定义了ALS_CONTROL寄存器,其中寄存器地址为0x80 。
它有3个字段;增益 - 映射到现实世界价值 - 和单个位标志的SW_Reset/模式。
ALS_CONTROL = Register ( 'ALS_CONTROL' , 0x80 , fields = (
BitField ( 'gain' , 0b00011100 , values_map = { 1 : 0b000 , 2 : 0b001 , 4 : 0b011 , 8 : 0b011 , 48 : 0b110 , 96 : 0b111 }),
BitField ( 'sw_reset' , 0b00000010 ),
BitField ( 'mode' , 0b00000001 )
))值不需要查找表,但是,一个函数可用于将值从设备理解的格式转换为。
下面的示例使用i2cdevice._byte_swap在存储/检索之前更改两个16位值的末端。
# This will address 0x88, 0x89, 0x8A and 0x8B as a continuous 32bit register
ALS_DATA = Register ( 'ALS_DATA' , 0x88 , fields = (
BitField ( 'ch1' , 0xFFFF0000 , bitwidth = 16 , values_in = _byte_swap , values_out = _byte_swap ),
BitField ( 'ch0' , 0x0000FFFF , bitwidth = 16 , values_in = _byte_swap , values_out = _byte_swap )
), read_only = True , bitwidth = 32 )一个“寄存器”及其“ Bitfield” S定义了一组规则和逻辑,用于使用设备类解释的硬件寄存器进行详细信息。使用registers=()关键字参数在设备上声明寄存器:
I2C_ADDR = 0x23
ltr559 = Device ( I2C_ADDR , bit_width = 8 , registers = (
ALS_CONTROL ,
ALS_DATA
))一个配置了寄存器字段的人可以使用get方法读取为名称的tuple:
register_values = ltr559 . get ( 'ALS_CONTROL' )
gain = register_values . gain
sw_reset = register_values . sw_reset
mode = register_values . mode 从get返回的命名tuple是不可变的,并且不会尝试将值映射到硬件,以便将一个或多个字段写入寄存器,您必须使用每个字段的关键字参数set :
ltr559 . set ( 'ALS_CONTROL' ,
gain = 4 ,
sw_reset = 1 )这将从设备中读取寄存器状态,相应地更新Bitfields,然后写回结果。