控制larpix芯片
larpix-control的Python项目详细描述
LARPIX控制
控制larpix芯片
设置和安装
这段代码用于Python2.7+和Python3.6+。
使用从pip安装larpix控件
pip install larpix-control
要将名称空间返回到larpix之前的状态,只需 运行pip uninstall larpix control。如果你想下载代码 你自己,你可以。只需从 存储库。
测试
您可以运行测试来说服自己软件的工作原理是
预期。在安装这个包之后,您可以运行测试
使用简单的命令pytest
您可以阅读这些测试以了解如何调用所有 功能。
文件结构
Larpix软件包包含:
larpix
|-- larpix
|-- io
| |-- fakeio
| |-- serialport
| `-- zmq_io
|-- logger
| |-- h5_logger
| `-- stdout_logger
|-- quickstart
|-- timestamp
|-- bitarrayhelper
|-- serial_helpers
| |-- analyzers
| |-- dataformatter
| |-- dataloader
| `-- datalogger
`-- configs
|-- chip
| |-- csa_bypass.json
| |-- default.json
| |-- physics.json
| `-- quiet.json
`-- controller
|-- pcb-10_chip_info.json
|-- pcb-1_chip_info.json
|-- pcb-2_chip_info.json
|-- pcb-3_chip_info.json
|-- pcb-4_chip_info.json
|-- pcb-5_chip_info.json
`-- pcb-6_chip_info.json
最小工作示例
所以你不是那种辅导的人。这是一个最低限度的工作 供您使用的示例:
>>>fromlarpix.larpiximportController,Packet>>>fromlarpix.io.fakeioimportFakeIO>>>fromlarpix.logger.stdout_loggerimportStdoutLogger>>>controller=Controller()>>>controller.io=FakeIO()>>>controller.logger=StdoutLogger(buffer_length=0)>>>controller.logger.enable()>>>chip1=controller.add_chip('1-1-1')# (access key)>>>chip1.config.global_threshold=25>>>controller.write_configuration('1-1-1',25)# chip key, register 25[Configwrite|Chipkey:'1-1-1'|Chip:1|Register:25|Value:16|Parity:1(valid:True)]>>>packet=Packet(b'\x04\x14\x80\xc4\x03\xf2 ')>>>packet_bytes=packet.bytes()>>>pretend_input=([packet],packet_bytes)>>>controller.io.queue.append(pretend_input)>>>controller.run(0.05,'test run')>>>print(controller.reads[0])[Data|Chipkey:None|Chip:1|Channel:5|Timestamp:123456|ADCdata:120|FIFOHalf:False|FIFOFull:False|Parity:1(valid:True)]
教程
本教程将介绍如何使用 拉皮克斯控制。
要访问包内容,请使用以下两种方法之一import
声明:
importlarpix# use the larpix namespace# or ...fromlarpix.larpiximport*# import all core larpix classes into the current namespace
本教程的其余部分将假设您已经导入了所有的核心larpix
通过a从larpix.larpix import*
命令初始化。
创建larpix控制器
larpix控制器翻译高级思想,如"read 配置寄存器10"进入与LARPIX ASIC之间的通信, 并将接收到的数据解释为可用格式。
控制器对象通过IO接口与LARPIX ASIC通信。
当前可用的IO接口有serialport
,zmq\u IO
和
fakeio
。在本教程中,我们将使用fakeio,但是
代码仍将与其他IO的正确初始化版本一起工作
接口。
使用
fromlarpix.io.fakeioimportFakeIOfromlarpix.logger.stdout_loggerimportStdoutLoggercontroller=Controller()controller.io=FakeIO()controller.logger=StdoutLogger(buffer_length=0)controller.logger.enable()
fakeio
对象模拟一个真正的io接口,用于测试目的。
它将输出指向stdout(即打印输出),然后
从手动更新的队列获取其输入。在每个结尾
本教程的相关章节将是添加预期
输出到队列。你每次跑步都得重新排队
代码。
类似地,stdoutlogger
模拟真实的记录器接口进行测试。它
将读/写命令的格式良好的记录打印到stdout every
缓冲区长度
数据包。记录器接口需要启用
将存储消息之前的记录器。在结束python会话之前,
应禁用记录器以刷新缓冲区中存储的所有剩余数据包。
设置larpix芯片
芯片对象表示实际的larpix asic。对于你想要的每个asic 与通信,创建一个larpix芯片对象并将其添加到 控制器。
chipid=5chip_key='1-1-5'chip5=controller.add_chip(chip_key)chip5=controller.get_chip(chip_key)
chip_键
字段指定控制器的必要信息。io
对象将数据包路由到/从芯片路由。此密钥如何映射到
物理芯片为每个larpix.io
类分别实现。
密钥本身由3个1字节的整数值组成,这些整数值表示 低层In larpix读数:
IO组:这是最高的层,代表一个控制系统 与多个IO通道通信
IO通道:这是中间层,代表一个单独的mosi/miso 配对< /P>
芯片ID:这是最低层,表示 mosi/miso网络
如果要直接与芯片密钥交互,可以使用
一个有效的键字符串(三个1字节整数,用破折号分隔,例如'1-1-1'
)。
请注意,0和255的ID是为特殊功能保留的。
fromlarpix.larpiximportKeyexample_key=Key('1-2-3')
您可以通过许多有用的方法从密钥中获取相关信息 属性:
example_key.io_group# 1example_key.io_channel# 2example_key.chip_id# 3example_key.to_dict()# returns a dict with the above keys / values
如果在脚本中使用键,建议您生成键
通过
key.from_dict()
方法保护密钥不被更新
格式化。
您可以阅读文档了解有关键
功能的更多信息。
调整larpix芯片的配置
每个芯片对象在软件中管理自己的配置。 可以使用芯片的属性按名称调整配置 配置:
chip5.config.global_threshold=35# entire register = 1 numberchip5.config.periodic_reset=1# one bit as part of a registerchip5.config.channel_mask[20]=1# one bit per channel
值被验证,无效值将引发异常。
注意:改变芯片对象的配置不会改变 ASIC上的配置。
设置配置后,必须将新值发送到larpix 亚瑟士。有一种合适的控制器方法:
pip install larpix-control
0
可以使用配置对象查找寄存器地址:
pip install larpix-control
1
对于扩展到多个寄存器的配置,相关的
属性将以\u addresses
结尾。某些配置共享
单个寄存器,其属性中包含所有名称。查看
找到要查找的名称的文档或源代码。(或看
Larpix产品介绍。)
从larpix asics读取配置
LARPIX ASIC的当前配置状态可以通过 使用控制器发送"配置读取"请求:
pip install larpix-control
2
对只读某些寄存器实现的相同变体 与写作一样阅读。
LARPIX ASIC的响应存储起来以供检查。见 "检查接收到的数据"部分了解更多信息。
Fakeio队列代码:
pip install larpix-control
3
从LARPIX ASIC接收数据
当第一次初始化时,larpix控制器忽略并丢弃
它从larpix接收的所有数据。控制器必须激活
通过调用start_listening()
。所有接收到的数据
在依赖于实现的队列或缓冲区中累积,具体取决于
在使用的IO接口上。要从缓冲区读取数据,请调用
controller的read()
方法,它返回原始的bytestream
已接收的以及已被
从Bytestream中提取。要停止监听新数据,请致电
停止收听()
。最后,将数据存储在控制器中
对象,调用store_packets
方法。全部合计:
pip install larpix-control
4
阅读数据有一个共同的模式,即开始倾听,
然后定期签入新数据,然后在一定数量之后
时间已过,停止监听并将所有数据存储为一个
收集。方法run(timelimit,message)
实现了这一点。
pip install larpix-control
5
第一个代码块的fakeio队列代码:
pip install larpix-control
6
第二个代码块的fakeio队列代码:
pip install larpix-control
7
检查接收到的数据
一旦数据存储在控制器中,它就可以在读取中使用
属性作为所有数据运行的列表。列表中的每个元素都是
packetcollection对象,其功能类似于数据包对象的列表
每个代表一个larpix包。
packetcollection对象可以像列表一样进行索引:
αααα18可以打印packetcollections以显示数据包的内容 它们包含。为了防止无休止的滚动,只有前十个和后十个 显示数据包,并记录省略的数据包的数量。到 查看省略的数据包,使用感兴趣区域周围的切片。
pip install larpix-control
9
在交互式python中,返回的对象不是打印的,而是
它们的"表示"被打印出来(参见\u repr\u
方法)。这个
packetcollections的表示是
数据包、"读取id"(也称为运行号)和消息
创建时与packetcollection关联。
单个LARPIX数据包
larpix包对象表示单个larpix uart包。他们 具有可用于检查或修改 包裹。
larpix
|-- larpix
|-- io
| |-- fakeio
| |-- serialport
| `-- zmq_io
|-- logger
| |-- h5_logger
| `-- stdout_logger
|-- quickstart
|-- timestamp
|-- bitarrayhelper
|-- serial_helpers
| |-- analyzers
| |-- dataformatter
| |-- dataloader
| `-- datalogger
`-- configs
|-- chip
| |-- csa_bypass.json
| |-- default.json
| |-- physics.json
| `-- quiet.json
`-- controller
|-- pcb-10_chip_info.json
|-- pcb-1_chip_info.json
|-- pcb-2_chip_info.json
|-- pcb-3_chip_info.json
|-- pcb-4_chip_info.json
|-- pcb-5_chip_info.json
`-- pcb-6_chip_info.json
0
在内部,包被表示为一个位数组,并且
不同的属性使用python"properties"无缝转换
在位表示和更直观的整数之间
代表。位表示可以用
位
属性。
数据包对象不限制您调整 数据包类型不正确。例如,您可以创建一个数据包并 然后设置packet.register_address=5。这将调整数据包 与配置包的"寄存器地址"相对应的位 区域,这可能不是您想要的数据包。
数据包有一个奇偶校验位,它强制奇偶校验,即
包中的所有单个位都必须是奇数。宇称
使用奇偶校验位值
属性可以如上所述访问位。
正确的奇偶校验位可以使用compute_parity()
计算,
数据包奇偶校验的有效性可以用
具有有效的奇偶校验()
。当构造一个新包时,正确的
可以使用assign_parity()
指定奇偶校验位
可以打印单个数据包以显示可读性 包内容的解释。印刷版调整其 基于数据包类型的输出,因此数据包将显示数据 字、时间戳等,而配置包将显示寄存器 地址和注册数据。
与packetcollections一样,包也有一个"表示"视图 基于组成数据包的字节。这对 创建新数据包,因为数据包的表示形式也是可用的 调用包构造函数。所以交互的输出 会话可以作为输入复制,也可以复制到脚本中以创建相同的会话 包,
使用HDF5记录器记录与LARPIX ASIC的通信
要创建与LARPIX ASIC通信的永久记录, 使用HDF5记录器。创建新的记录器
larpix
|-- larpix
|-- io
| |-- fakeio
| |-- serialport
| `-- zmq_io
|-- logger
| |-- h5_logger
| `-- stdout_logger
|-- quickstart
|-- timestamp
|-- bitarrayhelper
|-- serial_helpers
| |-- analyzers
| |-- dataformatter
| |-- dataloader
| `-- datalogger
`-- configs
|-- chip
| |-- csa_bypass.json
| |-- default.json
| |-- physics.json
| `-- quiet.json
`-- controller
|-- pcb-10_chip_info.json
|-- pcb-1_chip_info.json
|-- pcb-2_chip_info.json
|-- pcb-3_chip_info.json
|-- pcb-4_chip_info.json
|-- pcb-5_chip_info.json
`-- pcb-6_chip_info.json
1
您还可以通过传递
启用
关键字参数(默认为false
):
larpix
|-- larpix
|-- io
| |-- fakeio
| |-- serialport
| `-- zmq_io
|-- logger
| |-- h5_logger
| `-- stdout_logger
|-- quickstart
|-- timestamp
|-- bitarrayhelper
|-- serial_helpers
| |-- analyzers
| |-- dataformatter
| |-- dataloader
| `-- datalogger
`-- configs
|-- chip
| |-- csa_bypass.json
| |-- default.json
| |-- physics.json
| `-- quiet.json
`-- controller
|-- pcb-10_chip_info.json
|-- pcb-1_chip_info.json
|-- pcb-2_chip_info.json
|-- pcb-3_chip_info.json
|-- pcb-4_chip_info.json
|-- pcb-5_chip_info.json
`-- pcb-6_chip_info.json
2
现在,无论何时发送或接收数据包,它们都将被记录器捕获
并添加到记录器的缓冲区中。一旦缓冲区长度
数据包
捕获的数据包将写入文件。你可以强迫记录器
使用
hdf5logger.flush()
larpix
|-- larpix
|-- io
| |-- fakeio
| |-- serialport
| `-- zmq_io
|-- logger
| |-- h5_logger
| `-- stdout_logger
|-- quickstart
|-- timestamp
|-- bitarrayhelper
|-- serial_helpers
| |-- analyzers
| |-- dataformatter
| |-- dataloader
| `-- datalogger
`-- configs
|-- chip
| |-- csa_bypass.json
| |-- default.json
| |-- physics.json
| `-- quiet.json
`-- controller
|-- pcb-10_chip_info.json
|-- pcb-1_chip_info.json
|-- pcb-2_chip_info.json
|-- pcb-3_chip_info.json
|-- pcb-4_chip_info.json
|-- pcb-5_chip_info.json
`-- pcb-6_chip_info.json
3
如果你想暂时停止追踪通讯,
禁用
和启用
命令的作用与您所想的完全一样。
larpix
|-- larpix
|-- io
| |-- fakeio
| |-- serialport
| `-- zmq_io
|-- logger
| |-- h5_logger
| `-- stdout_logger
|-- quickstart
|-- timestamp
|-- bitarrayhelper
|-- serial_helpers
| |-- analyzers
| |-- dataformatter
| |-- dataloader
| `-- datalogger
`-- configs
|-- chip
| |-- csa_bypass.json
| |-- default.json
| |-- physics.json
| `-- quiet.json
`-- controller
|-- pcb-10_chip_info.json
|-- pcb-1_chip_info.json
|-- pcb-2_chip_info.json
|-- pcb-3_chip_info.json
|-- pcb-4_chip_info.json
|-- pcb-5_chip_info.json
`-- pcb-6_chip_info.json
4
完成测试后,请确保禁用记录器。如果你不这样做,
您将丢失仍在记录器对象缓冲区中的任何数据。我们强烈建议
使用try包装记录器代码,如果可以,则使用
语句包装记录器代码。任何剩余的
禁用时,缓冲区中的数据包将刷新到文件。
larpix
|-- larpix
|-- io
| |-- fakeio
| |-- serialport
| `-- zmq_io
|-- logger
| |-- h5_logger
| `-- stdout_logger
|-- quickstart
|-- timestamp
|-- bitarrayhelper
|-- serial_helpers
| |-- analyzers
| |-- dataformatter
| |-- dataloader
| `-- datalogger
`-- configs
|-- chip
| |-- csa_bypass.json
| |-- default.json
| |-- physics.json
| `-- quiet.json
`-- controller
|-- pcb-10_chip_info.json
|-- pcb-1_chip_info.json
|-- pcb-2_chip_info.json
|-- pcb-3_chip_info.json
|-- pcb-4_chip_info.json
|-- pcb-5_chip_info.json
`-- pcb-6_chip_info.json
5
从HDF5记录器查看数据
hdf5记录器使用format调用larpix+hdf5v1.0,在
larpix.format.hdf5format
模块(和
文档
从2.3.0版开始)。该模块包含一个to_文件
方法,该方法是
由hdf5logger
和from_file
方法在内部使用
可用于将文件内容加载回larpix控件。这个
LARPIX+HDF5格式是一种"普通HDF5"格式,可以使用
h5py
或任何语言的hdf5绑定。
从python打开hdf5文件
larpix
|-- larpix
|-- io
| |-- fakeio
| |-- serialport
| `-- zmq_io
|-- logger
| |-- h5_logger
| `-- stdout_logger
|-- quickstart
|-- timestamp
|-- bitarrayhelper
|-- serial_helpers
| |-- analyzers
| |-- dataformatter
| |-- dataloader
| `-- datalogger
`-- configs
|-- chip
| |-- csa_bypass.json
| |-- default.json
| |-- physics.json
| `-- quiet.json
`-- controller
|-- pcb-10_chip_info.json
|-- pcb-1_chip_info.json
|-- pcb-2_chip_info.json
|-- pcb-3_chip_info.json
|-- pcb-4_chip_info.json
|-- pcb-5_chip_info.json
`-- pcb-6_chip_info.json
6
数据文件中有一个组("u header"
)和两个数据集
("数据包"
和"消息"
)。头组包含一些关于
创建数据文件时,文件格式版本号存储为
属性。
larpix
|-- larpix
|-- io
| |-- fakeio
| |-- serialport
| `-- zmq_io
|-- logger
| |-- h5_logger
| `-- stdout_logger
|-- quickstart
|-- timestamp
|-- bitarrayhelper
|-- serial_helpers
| |-- analyzers
| |-- dataformatter
| |-- dataloader
| `-- datalogger
`-- configs
|-- chip
| |-- csa_bypass.json
| |-- default.json
| |-- physics.json
| `-- quiet.json
`-- controller
|-- pcb-10_chip_info.json
|-- pcb-1_chip_info.json
|-- pcb-2_chip_info.json
|-- pcb-3_chip_info.json
|-- pcb-4_chip_info.json
|-- pcb-5_chip_info.json
`-- pcb-6_chip_info.json
7
数据包按顺序存储为
HDF5数据集的行。列引用numpy mixed的元素
类型数组。数据类型和条目的详细信息由
larpix.format.hdf5format.dtype
对象-有关详细信息,请参阅larpix控制文档。
只需访问包在
HDF5数据集。
larpix
|-- larpix
|-- io
| |-- fakeio
| |-- serialport
| `-- zmq_io
|-- logger
| |-- h5_logger
| `-- stdout_logger
|-- quickstart
|-- timestamp
|-- bitarrayhelper
|-- serial_helpers
| |-- analyzers
| |-- dataformatter
| |-- dataloader
| `-- datalogger
`-- configs
|-- chip
| |-- csa_bypass.json
| |-- default.json
| |-- physics.json
| `-- quiet.json
`-- controller
|-- pcb-10_chip_info.json
|-- pcb-1_chip_info.json
|-- pcb-2_chip_info.json
|-- pcb-3_chip_info.json
|-- pcb-4_chip_info.json
|-- pcb-5_chip_info.json
`-- pcb-6_chip_info.json
8
如果要使用numpy
的混合类型数组,可以转换
将原始值作为列表(长度为
1,例如)通过
larpix
|-- larpix
|-- io
| |-- fakeio
| |-- serialport
| `-- zmq_io
|-- logger
| |-- h5_logger
| `-- stdout_logger
|-- quickstart
|-- timestamp
|-- bitarrayhelper
|-- serial_helpers
| |-- analyzers
| |-- dataformatter
| |-- dataloader
| `-- datalogger
`-- configs
|-- chip
| |-- csa_bypass.json
| |-- default.json
| |-- physics.json
| `-- quiet.json
`-- controller
|-- pcb-10_chip_info.json
|-- pcb-1_chip_info.json
|-- pcb-2_chip_info.json
|-- pcb-3_chip_info.json
|-- pcb-4_chip_info.json
|-- pcb-5_chip_info.json
`-- pcb-6_chip_info.json
9
您还可以查看整个"列"的数据:
>>>fromlarpix.larpiximportController,Packet>>>fromlarpix.io.fakeioimportFakeIO>>>fromlarpix.logger.stdout_loggerimportStdoutLogger>>>controller=Controller()>>>controller.io=FakeIO()>>>controller.logger=StdoutLogger(buffer_length=0)>>>controller.logger.enable()>>>chip1=controller.add_chip('1-1-1')# (access key)>>>chip1.config.global_threshold=25>>>controller.write_configuration('1-1-1',25)# chip key, register 25[Configwrite|Chipkey:'1-1-1'|Chip:1|Register:25|Value:16|Parity:1(valid:True)]>>>packet=Packet(b'\x04\x14\x80\xc4\x03\xf2 ')>>>packet_bytes=packet.bytes()>>>pretend_input=([packet],packet_bytes)>>>controller.io.queue.append(pretend_input)>>>controller.run(0.05,'test run')>>>print(controller.reads[0])[Data|Chipkey:None|Chip:1|Channel:5|Timestamp:123456|ADCdata:120|FIFOHalf:False|FIFOFull:False|Parity:1(valid:True)]0
h5py
和numpy
优化数据检索,以便您可以读取
某些列或行,而不将整个数据文件加载到内存中。
完成后别忘了关闭文件。(无需 如果您即将退出,则使用交互式python会话。)
>>>fromlarpix.larpiximportController,Packet>>>fromlarpix.io.fakeioimportFakeIO>>>fromlarpix.logger.stdout_loggerimportStdoutLogger>>>controller=Controller()>>>controller.io=FakeIO()>>>controller.logger=StdoutLogger(buffer_length=0)>>>controller.logger.enable()>>>chip1=controller.add_chip('1-1-1')# (access key)>>>chip1.config.global_threshold=25>>>controller.write_configuration('1-1-1',25)# chip key, register 25[Configwrite|Chipkey:'1-1-1'|Chip:1|Register:25|Value:16|Parity:1(valid:True)]>>>packet=Packet(b'\x04\x14\x80\xc4\x03\xf2 ')>>>packet_bytes=packet.bytes()>>>pretend_input=([packet],packet_bytes)>>>controller.io.queue.append(pretend_input)>>>controller.run(0.05,'test run')>>>print(controller.reads[0])[Data|Chipkey:None|Chip:1|Channel:5|Timestamp:123456|ADCdata:120|FIFOHalf:False|FIFOFull:False|Parity:1(valid:True)]1
使用Bern DAQ板运行
既然您已经用fakeio类完成了教程,现在就可以了 与一些larpix asic接口。如果你有一个伯尔尼DAQv2-3设置,你可以 按照本教程的其余部分进行操作。
在配置系统之前,需要生成配置
zmq_io或multizmq_io接口的文件。这提供了
物理设备的芯片密钥。在zmq接口的情况下,它映射
IO组到DAQ板的IP地址。许多例子
配置在下面的安装中提供
larpix/configs/io/<;config name>;.json
,这可能适合您的目的。我们
建议阅读有关如何创建这些配置文件之一的文档。
默认情况下,在查找
安装文件。如果你的网络上只有一个数据采集板
您将加载io/daq srv<;>;.json
配置。
在DAQ系统启动并运行时
>>>fromlarpix.larpiximportController,Packet>>>fromlarpix.io.fakeioimportFakeIO>>>fromlarpix.logger.stdout_loggerimportStdoutLogger>>>controller=Controller()>>>controller.io=FakeIO()>>>controller.logger=StdoutLogger(buffer_length=0)>>>controller.logger.enable()>>>chip1=controller.add_chip('1-1-1')# (access key)>>>chip1.config.global_threshold=25>>>controller.write_configuration('1-1-1',25)# chip key, register 25[Configwrite|Chipkey:'1-1-1'|Chip:1|Register:25|Value:16|Parity:1(valid:True)]>>>packet=Packet(b'\x04\x14\x80\xc4\x03\xf2 ')>>>packet_bytes=packet.bytes()>>>pretend_input=([packet],packet_bytes)>>>controller.io.queue.append(pretend_input)>>>controller.run(0.05,'test run')>>>print(controller.reads[0])[Data|Chipkey:None|Chip:1|Channel:5|Timestamp:123456|ADCdata:120|FIFOHalf:False|FIFOFull:False|Parity:1(valid:True)]2
这会给你一个安静的状态,没有数据包。偶尔,会有 在一个系统缓冲区(larpix、fpga、daq服务器)中留下一些数据包。一 第二次运行命令应返回,而不包含任何新数据包。
如果使用的是v1.5阳极,则可能需要重新配置miso/mosi映射(因为菊花链的miso/mosi对不一定在单个通道上)。为此,请在初始化时将miso_map
或mosi_map
传递给zmq-io
对象:
>>>fromlarpix.larpiximportController,Packet>>>fromlarpix.io.fakeioimportFakeIO>>>fromlarpix.logger.stdout_loggerimportStdoutLogger>>>controller=Controller()>>>controller.io=FakeIO()>>>controller.logger=StdoutLogger(buffer_length=0)>>>controller.logger.enable()>>>chip1=controller.add_chip('1-1-1')# (access key)>>>chip1.config.global_threshold=25>>>controller.write_configuration('1-1-1',25)# chip key, register 25[Configwrite|Chipkey:'1-1-1'|Chip:1|Register:25|Value:16|Parity:1(valid:True)]>>>packet=Packet(b'\x04\x14\x80\xc4\x03\xf2 ')>>>packet_bytes=packet.bytes()>>>pretend_input=([packet],packet_bytes)>>>controller.io.queue.append(pretend_input)>>>controller.run(0.05,'test run')>>>print(controller.reads[0])[Data|Chipkey:None|Chip:1|Channel:5|Timestamp:123456|ADCdata:120|FIFOHalf:False|FIFOFull:False|Parity:1(valid:True)]3
检查配置
如果您仍在接收数据,可以检查硬件芯片配置 将软件芯片配置与匹配
>>>fromlarpix.larpiximportController,Packet>>>fromlarpix.io.fakeioimportFakeIO>>>fromlarpix.logger.stdout_loggerimportStdoutLogger>>>controller=Controller()>>>controller.io=FakeIO()>>>controller.logger=StdoutLogger(buffer_length=0)>>>controller.logger.enable()>>>chip1=controller.add_chip('1-1-1')# (access key)>>>chip1.config.global_threshold=25>>>controller.write_configuration('1-1-1',25)# chip key, register 25[Configwrite|Chipkey:'1-1-1'|Chip:1|Register:25|Value:16|Parity:1(valid:True)]>>>packet=Packet(b'\x04\x14\x80\xc4\x03\xf2 ')>>>packet_bytes=packet.bytes()>>>pretend_input=([packet],packet_bytes)>>>controller.io.queue.append(pretend_input)>>>controller.run(0.05,'test run')>>>print(controller.reads[0])[Data|Chipkey:None|Chip:1|Channel:5|Timestamp:123456|ADCdata:120|FIFOHalf:False|FIFOFull:False|Parity:1(valid:True)]4
如果配置读取数据包与软件芯片配置不匹配,则 将返回
>>>fromlarpix.larpiximportController,Packet>>>fromlarpix.io.fakeioimportFakeIO>>>fromlarpix.logger.stdout_loggerimportStdoutLogger>>>controller=Controller()>>>controller.io=FakeIO()>>>controller.logger=StdoutLogger(buffer_length=0)>>>controller.logger.enable()>>>chip1=controller.add_chip('1-1-1')# (access key)>>>chip1.config.global_threshold=25>>>controller.write_configuration('1-1-1',25)# chip key, register 25[Configwrite|Chipkey:'1-1-1'|Chip:1|Register:25|Value:16|Parity:1(valid:True)]>>>packet=Packet(b'\x04\x14\x80\xc4\x03\xf2 ')>>>packet_bytes=packet.bytes()>>>pretend_input=([packet],packet_bytes)>>>controller.io.queue.append(pretend_input)>>>controller.run(0.05,'test run')>>>print(controller.reads[0])[Data|Chipkey:None|Chip:1|Channel:5|Timestamp:123456|ADCdata:120|FIFOHalf:False|FIFOFull:False|Parity:1(valid:True)]5
丢失的数据包将显示为
>>>fromlarpix.larpiximportController,Packet>>>fromlarpix.io.fakeioimportFakeIO>>>fromlarpix.logger.stdout_loggerimportStdoutLogger>>>controller=Controller()>>>controller.io=FakeIO()>>>controller.logger=StdoutLogger(buffer_length=0)>>>controller.logger.enable()>>>chip1=controller.add_chip('1-1-1')# (access key)>>>chip1.config.global_threshold=25>>>controller.write_configuration('1-1-1',25)# chip key, register 25[Configwrite|Chipkey:'1-1-1'|Chip:1|Register:25|Value:16|Parity:1(valid:True)]>>>packet=Packet(b'\x04\x14\x80\xc4\x03\xf2 ')>>>packet_bytes=packet.bytes()>>>pretend_input=([packet],packet_bytes)>>>controller.io.queue.append(pretend_input)>>>controller.run(0.05,'test run')>>>print(controller.reads[0])[Data|Chipkey:None|Chip:1|Channel:5|Timestamp:123456|ADCdata:120|FIFOHalf:False|FIFOFull:False|Parity:1(valid:True)]6
如果您的配置匹配,并且您仍然收到数据,那么您可能会看到 从环境中探测到的传感器祝你好运!< /P>
启用单个通道
>>>fromlarpix.larpiximportController,Packet>>>fromlarpix.io.fakeioimportFakeIO>>>fromlarpix.logger.stdout_loggerimportStdoutLogger>>>controller=Controller()>>>controller.io=FakeIO()>>>controller.logger=StdoutLogger(buffer_length=0)>>>controller.logger.enable()>>>chip1=controller.add_chip('1-1-1')# (access key)>>>chip1.config.global_threshold=25>>>controller.write_configuration('1-1-1',25)# chip key, register 25[Configwrite|Chipkey:'1-1-1'|Chip:1|Register:25|Value:16|Parity:1(valid:True)]>>>packet=Packet(b'\x04\x14\x80\xc4\x03\xf2 ')>>>packet_bytes=packet.bytes()>>>pretend_input=([packet],packet_bytes)>>>controller.io.queue.append(pretend_input)>>>controller.run(0.05,'test run')>>>print(controller.reads[0])[Data|Chipkey:None|Chip:1|Channel:5|Timestamp:123456|ADCdata:120|FIFOHalf:False|FIFOFull:False|Parity:1(valid:True)]7
设置芯片的全局阈值
>>>fromlarpix.larpiximportController,Packet>>>fromlarpix.io.fakeioimportFakeIO>>>fromlarpix.logger.stdout_loggerimportStdoutLogger>>>controller=Controller()>>>controller.io=FakeIO()>>>controller.logger=StdoutLogger(buffer_length=0)>>>controller.logger.enable()>>>chip1=controller.add_chip('1-1-1')# (access key)>>>chip1.config.global_threshold=25>>>controller.write_configuration('1-1-1',25)# chip key, register 25[Configwrite|Chipkey:'1-1-1'|Chip:1|Register:25|Value:16|Parity:1(valid:True)]>>>packet=Packet(b'\x04\x14\x80\xc4\x03\xf2 ')>>>packet_bytes=packet.bytes()>>>pretend_input=([packet],packet_bytes)>>>controller.io.queue.append(pretend_input)>>>controller.run(0.05,'test run')>>>print(controller.reads[0])[Data|Chipkey:None|Chip:1|Channel:5|Timestamp:123456|ADCdata:120|FIFOHalf:False|FIFOFull:False|Parity:1(valid:True)]8
将脉冲注入特定通道
>>>fromlarpix.larpiximportController,Packet>>>fromlarpix.io.fakeioimportFakeIO>>>fromlarpix.logger.stdout_loggerimportStdoutLogger>>>controller=Controller()>>>controller.io=FakeIO()>>>controller.logger=StdoutLogger(buffer_length=0)>>>controller.logger.enable()>>>chip1=controller.add_chip('1-1-1')# (access key)>>>chip1.config.global_threshold=25>>>controller.write_configuration('1-1-1',25)# chip key, register 25[Configwrite|Chipkey:'1-1-1'|Chip:1|Register:25|Value:16|Parity:1(valid:True)]>>>packet=Packet(b'\x04\x14\x80\xc4\x03\xf2 ')>>>packet_bytes=packet.bytes()>>>pretend_input=([packet],packet_bytes)>>>controller.io.queue.append(pretend_input)>>>controller.run(0.05,'test run')>>>print(controller.reads[0])[Data|Chipkey:None|Chip:1|Channel:5|Timestamp:123456|ADCdata:120|FIFOHalf:False|FIFOFull:False|Parity:1(valid:True)]9
您需要定期将DAC重置为255,否则将收到
valueerror
一旦DAC达到最小指定值。
importlarpix# use the larpix namespace# or ...fromlarpix.larpiximport*# import all core larpix classes into the current namespace0
在通道上启用模拟监视器
importlarpix# use the larpix namespace# or ...fromlarpix.larpiximport*# import all core larpix classes into the current namespace1
当软件强制每个芯片只有一个通道被驱动时 模拟监视器,如果在芯片之间移动,则必须禁用模拟监视器。
其他实现细节
末端性
我们使用的约定是lsb先发出,然后再读入。 LSB在数组中的位置,并列出从对象到 对象,基于与我们交互的其他包的约定。
特别是,pyserial首先发送索引0,因此对于bytes
对象,
索引0通常具有lsb。另一方面,比特串
将最后的索引视为lsb,这也是数字的方式
通常显示在屏幕上,例如二进制的0100
表示4而不是2。所以
位数组
和位
对象,LSB通常是最后一个。
注意,这种组合导致了一个稍微尴尬的约定
bytestring的最低有效位是
第一个字节。例如,如果包的位[15:0]是
0000 0010 0000 0001
(=0x0201=513),则字节将作为
b'\x01\x02'
配置对象
配置对象表示larpix中的所有选项
配置寄存器。larpix数据表中配置表中的每一行
在
配置
对象中具有相应的属性。每通道
属性存储在列表中,所有其他属性存储为
一个简单的整数。(这包括从单个位到值的所有内容
例如"重置周期",它跨越3个字节。)
配置
对象还具有一些用于启用和
禁用每通道设置(例如csa_testpulse_enable
或
频道掩码
)。这里列出了相关的方法,应该是
前缀为启用或
禁用:
通道
启用/禁用通道掩码
寄存器外部触发器
启用/禁用外部触发器掩码
注册testpulse
启用/禁用csa\u testpulse\u启用
寄存器模拟监视器
启用/禁用CSA监视器选择
寄存器
大多数这些方法都接受一个可选的通道列表来启用或
禁用(并且在所有频道上没有指定列表的操作)。例外情况
是启用模拟监视器
(及其禁用
对应项)启用
方法要求指定特定的通道,并且禁用
方法根本不需要任何参数。这是因为最多只有一个
允许通道启用模拟监视器。
配置对象的机制确保每个值
在发送时转换为适当的位集
对物理芯片的实际命令。虽然这不是透明的
作为这个库的用户,您可能想知道
配置选项总是在同一配置中一起发送
包:
csa_gain
,csa_bypass
和internal_bypass
组合成一个 单字节,所以即使它们有自己的属性,它们也必须 一起写入物理芯片测试模式
,交叉触发模式
,定期复位
,以及fifo_诊断阿梅路< /P>
类似地,所有的每通道选项(除了像素修剪 阈值)以4组8个频道发送。
可以通过导入larpix.configs
并运行
加载
函数。此函数用于搜索具有
在搜索
"系统"位置(秘密地在larpix/configs/文件夹中)。这是
类似于c中的"header.h"行为。
通过调用 所需的文件名。
配置芯片对象后,必须发送配置 到物理芯片。