Initiates an I²C read from a specific register within a specific device
Device
| Name | Type | Description |
|---|---|---|
| deviceAddress | Integer |
The 8-bit I²C base address
|
| registerAddress | String |
The I²C sub-address, or "" for none
|
| numberOfBytes | Integer |
The number of bytes to read from the bus
|
String — the characters read from the I²C bus, or null on error
This method initiates a read of numberOfBytes of data from the device identified by the base address and the device register you wish to access (sub-address). An empty string, "", may be passed to skip the sub-address write phase; otherwise, the first two characters of the string are used as the most-significant byte and the least-significant byte, respectively.
On successful completion, the data read is returned as a string. If there is a read error, the method returns null, not the empty string "". In the event of an error, you can call i2c.readerror() to diagnose the fault. i2c.readerror() is only available with impOS™ release 30 onwards.
As with any Squirrel string, the result can be indexed using [] as if it were an array of bytes, or by using Squirrel’s string.slice() delegate method.
Many vendors’ device datasheets specify a 7-bit base I²C address. In this case, you will need to bit-shift the address left by 1 bit (ie. multiply it by 2) to
local impReadyI2Caddress = datasheetI2Caddress << 1;
The code below provides an example of using an I²C device. It configures an SA56004X temperature sensor — as found on the Hannah R2 reference design — by requesting the CLOCK_SPEED_400_KHZ clocking rate.