用于与smbus兼容的i2c设备交互的python dsl

i2cdevice的Python项目详细描述


I2C设备

Build StatusCoverage StatusPyPi PackagePython Versions

i2cdevice是一种python领域专用语言,旨在处理 常见的smbus/i2c设备交互模式。

此项目旨在使python库的组实现 对于I2C设备,更容易、更简单和固有的自我记录。

它通过分离硬件的详细描述来实现 寄存器以及如何将它们操作成一个结构化的定义 语言。

此项目的目的不是帮助您为python创建一个公共api 设备-应该建立在这里介绍的基础之上。

使用此库

您通常应该以硬件的1:1表示为目标 在你正在实现的设备中注册,即使你不打算 使用所有功能。实现完整的寄存器集 允许在将来轻松添加新功能。

查看下面列出的库以获取实际示例。

功能

  • 用于描述设备、寄存器和单个位字段的类 以与数据表紧密映射的方式在寄存器内
  • 从真实数字(如512ms)到 注册值(例如0b111)并再次返回
  • 为每个位字段自动生成访问器-添加mode 字段,您将在 登记。
  • 支持将多个字节视为单个值或单个 用多个值注册

示例

下面的示例定义LTR559上的ALS_CONTROL寄存器, 注册地址为0x80

它有3个字段;增益-映射到真实世界的值-和 sw_reset/mode,是单位标志。

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更改endianness 在存储/检索两个16位值之前。

# This will address 0x88, 0x89, 0x8A and 0x8B as a continuous 32bit registerALS_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)

“寄存器”及其“位字段”定义了 详细说明由设备输入的硬件寄存器 上课。在设备上使用^{tt9}声明寄存器$ 关键字参数:

I2C_ADDR=0x23ltr559=Device(I2C_ADDR,bit_width=8,registers=(ALS_CONTROL,ALS_DATA))

0.0.5

  • 碰撞到稳定释放

0.0.4

  • 错误修复

0.0.3

  • 添加了许可证

0.0.2

  • 主要重构

0.0.1

  • 初始版本

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java将Int值传递给另一个类   在使用Sdin(或非交互式)输入| Java时调试奇怪的输入错误   java返回一个文本字符串作为响应struts2   java为什么我们不能在声明局部变量之前初始化它呢?   java从现有XML中读取值并将其填充到Json中   java Spring Boot+Maven:找不到repositoryFactoryBean   java使用regex表示“W o.Rd”。replaceAll(“单词”、“替换”)   java Sub resorce在Jersey REST API框架中不起作用   java在组件启动时,当所述报告存储在Sharepoint中时,是否可以加载预格式化的WebDataRocks报告?   java并发更新列表的最佳方法   servlets Java web应用程序对象调度   应用程序在点击按钮时崩溃,Android Studio(Java)   java如何为掷骰子游戏调用另一个类中的方法?