]> git.giacomolli.uk - onehouse/blob - doc/m31.rst
ced2fe2f3489f675c7f93271808b04e149781c30
[onehouse] / doc / m31.rst
1 ###############
2 Ebyte M31 I/O
3 ###############
4
5 The ``driver/m31`` package defines one host and up to fifteen expansion
6 modules. A module's slice index is its slot. The host has eight digital
7 inputs and eight digital outputs. Mixed expansions add eight of each,
8 input expansions add sixteen inputs, output expansions add sixteen
9 outputs, and analog expansions add eight voltage outputs.
10
11 Each point uses ``m{slot}.di{channel}``, ``m{slot}.do{channel}``, or
12 ``m{slot}.ao{channel}``. Inputs, coils, and analog registers have
13 independent zero-based address ranges that continue across modules.
14 Analog registers represent zero through ten volts as zero through 10000.
15 Hardware pulse widths are whole milliseconds from 50 through 65535.
16 Their width registers start at ``0x30d4`` and their output-mode
17 registers start at ``0x32c8``, both indexed by coil address. Mode zero
18 is level control and mode one is pulse control.
19
20 Descriptors use manufacturer ``ebyte`` and firmware ``unknown``. The
21 package does not read the host identity registers. Pulse capabilities
22 accept commands but do not report transient coil state. Input
23 capabilities are read-only.
24
25 Tests verify topology and descriptor values without a physical module.
26 They do not confirm physical expansion limits or relay timing under
27 load. The conservative sixteen-module limit includes the host.