I2CDEVICE는 일반적인 SMBUS/I2C 장치 상호 작용 패턴을 다루기위한 파이썬 프레임 워크입니다.
이 프로젝트는 I2C 장치 용 Python 라이브러리의 그룹 업 구현을보다 쉽고 간단하며 본질적으로 자체 문서화하는 것을 목표로합니다.
하드웨어 레지스터에 대한 자세한 설명과 구조화 된 정의 언어로 조작 해야하는 방법을 분리하여이를 수행합니다.
이 프로젝트는 Python 장치를위한 공개 API를 만드는 데 도움이되지 않습니다. 여기에 제시된 기초 위에 구축해야합니다.
일반적으로 모든 기능을 사용하지 않더라도 구현중인 장치에서 하드웨어 레지스터의 1 : 1 표현을 목표로해야합니다. 전체 레지스터 세트를 구현하면 향후 새로운 기능을 쉽게 추가 할 수 있습니다.
실제 예제는 아래 나열된 라이브러리를 확인하십시오.
512ms )에서 등록 값 (예 : 0b111 )으로 다시 다시 돌아와서 다시 돌아옵니다.get 사용하여 명명 된 필드로 레지스터를 읽습니다set 사용하여 트랜잭션에 여러 레지스터 필드를 작성하십시오. 아래 예제는 LTR559의 ALS_CONTROL 레지스터를 레지스터 주소 0x80 과 함께 정의합니다.
3 개의 필드가 있습니다. 게인 - 실제 값에 매핑되어 있습니다.
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 ) "레지스터"및 그 "비트 필드"는 장치 클래스에서 해석되는 하드웨어 레지스터를 세부하기 위해 일련의 규칙과 논리를 정의합니다. registers=() 키워드 인수를 사용하여 장치에서 레지스터가 선언됩니다.
I2C_ADDR = 0x23
ltr559 = Device ( I2C_ADDR , bit_width = 8 , registers = (
ALS_CONTROL ,
ALS_DATA
)) 하나의 구성 레지스터 필드를 get 메소드를 사용하여 이름을 지정할 수 있습니다.
register_values = ltr559 . get ( 'ALS_CONTROL' )
gain = register_values . gain
sw_reset = register_values . sw_reset
mode = register_values . mode get 에서 반환 된 이름의 이름은 불변이며 각 필드에 대한 키워드 인수와 함께 set 해야하는 레지스터에 하나 이상의 필드를 작성하려면 값을 하드웨어에 다시 매핑하려고 시도하지 않습니다.
ltr559 . set ( 'ALS_CONTROL' ,
gain = 4 ,
sw_reset = 1 )장치에서 레지스터 상태를 읽고 비트 필드를 그에 따라 업데이트하고 결과를 다시 작성합니다.