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,然後寫回結果。