modelI2cGenericDevice
I2C slave peripheral whose whole behaviour comes from a Python script, without creating a dedicated class
Extends from Internal.Devices.PartialI2cDevice (Base of the I2C slave peripherals: open-drain electrical link, bus decoding, behaviour described by a Python script).
Information
The component to place in a schematic when the peripheral to simulate matches none of the supplied models. Set addresses and designate a script: the default script, Resources/Scripts/Device/i2c_generic.py, is a commented template (a small register bank) to copy and adapt.
As soon as the same peripheral comes back in several schematics, it is better to turn it into a class: extending Internal.Devices.PartialI2cDevice and setting addresses, scriptPath and usePullUp takes a few lines — this is how I2cEchoDevice and I2cGroveLcdRgb are written.
Parameters
| Type | Name | Default | Description |
|---|---|---|---|
| Electrical › Supply | |||
| Boolean | useSupplyPin (from PartialSupplyPin) | false | Show the VCC supply pin: the peripheral is supplied by the circuit (its high levels follow VCC, its consumption IQ is drawn from VCC) - unchecked: ideal internal supply VOH, nothing to wire |
| Modelica.Units.SI.Voltage | VOH (from PartialSupplyPin) | Interfaces.VOH | Logic high voltage: ideal internal supply, high level of the outputs and of the pull-ups - with the VCC pin, the voltage of VCC is used instead |
| Modelica.Units.SI.Current | IQ (from PartialSupplyPin) | 1e-3 | Current drawn from VCC by the peripheral (quiescent consumption, outputs excluded) |
| Boolean | useGroundPin (from PartialSupplyPin) | true | Show the GND pin - unchecked: the peripheral is referenced to the simulation ground (0 V), nothing to wire |
| I2C bus | |||
| String | addresses (from PartialI2cDevice) | "0x42" | 7-bit address(es) the peripheral answers to, e.g. "0x42" or "0x3E, 0x62" (at most 4) |
| Boolean | usePullUp (from PartialI2cDevice) | false | Carry the pull-up resistors of SDA and SCL to the supply (at least one component of the bus must do it) |
| Modelica.Units.SI.Resistance | RPullUp (from PartialI2cDevice) | 4700 | Pull-up resistance of each line |
| Behaviour | |||
| String | scriptPath (from PartialI2cDevice) | "" | Script .py describing the behaviour (on_write / on_read / outputs / lines) |
| Inputs / outputs › Inputs (handler argument v) | |||
| Boolean | useValueInput (from PartialI2cDevice) | false | Take the quantities from the valueIn connector rather than from a constant |
| Integer | nIn (from PartialI2cDevice) | 1 | Number of quantities received from the model |
| Real | fixedValue (from PartialI2cDevice) | 0 | Value used when valueIn is not connected |
| Inputs / outputs › Outputs (return value of outputs()) | |||
| Integer | nOut (from PartialI2cDevice) | 1 | Number of quantities returned to the model by outputs() - leave the connector unconnected if unused |
| Electrical › Levels | |||
| Modelica.Units.SI.Voltage | VIH (from PartialI2cDevice) | Interfaces.VIH | Threshold above which an input reads high |
| Modelica.Units.SI.Voltage | VIL (from PartialI2cDevice) | Interfaces.VIL | Threshold below which an input reads low |
| Electrical › Impedances | |||
| Modelica.Units.SI.Resistance | ROut (from PartialI2cDevice) | Interfaces.ROut | Resistance of the SDA output transistor when it pulls the line to ground |
| Modelica.Units.SI.Conductance | GOff (from PartialI2cDevice) | 1e-9 | Leakage of the SDA output transistor when off (line released) |
| Modelica.Units.SI.Capacitance | CIn (from PartialI2cDevice) | 10e-12 | Input capacitance of each pin (SDA, SCL) |
| Modelica.Units.SI.Resistance | RIn (from PartialI2cDevice) | 10 | Series resistance of each pin (pad), between the bus wire and the input capacitance |
Connectors
| Type | Name | Default | Description |
|---|---|---|---|
| Modelica.Electrical.Analog.Interfaces.NegativePin | GND (from PartialSupplyPin) | Common reference (ground), to be connected to the microcontroller's one - shown when useGroundPin is checked | |
| Modelica.Electrical.Analog.Interfaces.PositivePin | VCC (from PartialSupplyPin) | Supply of the peripheral (e.g. 3V3(OUT) of a Raspberry Pi Pico) - shown when useSupplyPin is checked | |
| Modelica.Electrical.Analog.Interfaces.PositivePin | SDA (from PartialI2cDevice) | I2C bus data - to be connected to the SDA pin of the microcontroller and of the other peripherals | |
| Modelica.Electrical.Analog.Interfaces.PositivePin | SCL (from PartialI2cDevice) | I2C bus clock - to be connected to the SCL pin of the microcontroller and of the other peripherals | |
| Modelica.Blocks.Interfaces.RealInput[nIn] | valueIn (from PartialI2cDevice) | Quantities supplied by the model, passed to the script's handlers (argument v) | |
| Modelica.Blocks.Interfaces.RealOutput[nOut] | valueOut (from PartialI2cDevice) | Quantities returned by outputs() - the peripheral then becomes an actuator |
Components
| Type | Name | Default | Description |
|---|---|---|---|
| Boolean | sdaDriveLow (from PartialI2cDevice) | The peripheral pulls SDA to ground (acknowledge, or 0 bit read by the master) | |
| Boolean | busy (from PartialI2cDevice) | A phase addressed to this peripheral is in progress | |
| Integer | eventSeq (from PartialI2cDevice) | Incremented at each completed write or read phase | |
| String | lastEvent (from PartialI2cDevice) | Summary of the last completed phase (log) | |
| String | line1 (from PartialI2cDevice) | First line of text returned by lines() (displays) | |
| String | line2 (from PartialI2cDevice) | Second line of text returned by lines() |