Skip to main content

SMBus

smbus module implements SMBus communication protocol.

note

SMBus is available since Gateway version 2.2.

note

SMBus client can be dangerous if used improperly. Do not use SMBus client on random addresses. Anyway, it is of little use unless you have good knowledge of the chip you're working with and an idea of what you are looking for.

smbus.open()

-- @param bus_number integer I²C bus number
-- @return table SMBus client
function smbus.open(bus_number)
end

Creates new SMBus client instance with the given I²C bus number. The bus_number is number in /dev file name. For example, I²C bus i2c-2 has bus number 2.

Example

local bus = smbus.open(2)

bus Object

bus:read_byte_reg()

-- @param addr integer 7-bits device address
-- @param reg integer 1-byte register number
-- @return integer, string 1-byte value and error string
function bus:read_byte_reg(addr, reg)
end

Reads a single byte from a designated register. When read fails, error will contain a non-nil string. If read succeeds error will be nil.

Example

local value, error = bus:read_byte_reg(0x5A, 0xAF)
if error then
enapter.log('read byte failed: '..error, 'error')
else
enapter.log('read byte: '..value)
end

bus:write_byte_reg()

-- @param addr integer 7-bits device address
-- @param reg integer 1-byte register number
-- @param value integer, 1-byte value
-- @return string error
function bus:write_byte_reg(addr, reg, value)
end

Writes a single byte to a designated register. When write fails, error will contain a non-nil string. If write succeeds error will be nil.

Example

local error = bus:write_byte_reg(0x5A, 0xAF, 0xBA)
if error then
enapter.log('write byte failed: '..error, 'error')
end

bus:read_word_reg()

-- @param addr integer 7-bits device address
-- @param reg integer 1-byte register number
-- @return integer, string 2-bytes word value and error string
function bus:read_word_reg(addr, reg)
end

Reads a 2-bytes word from a designated register. When read fails, error will contain a non-nil string. If read succeeds error will be nil.

Example

local value, error = bus:read_word_reg(0x5A, 0xBF)
if error then
enapter.log('read word failed: '..error, 'error')
else
enapter.log('read word '..value)
end

bus:write_word_reg()

-- @param addr integer 7-bits device address
-- @param reg integer 1-byte register number
-- @param value integer 2-bytes word value
-- @return string error
function bus:write_word_reg(addr, reg, value)
end

Writes a 2-bytes word to a designated register. When write fails, error will contain a non-nil string. If write succeeds error will be nil.

Example

local error = bus:write_word_reg(0x5A, 0xBF, 0xABDC)
if error then
enapter.log('write word failed: '..error, 'error')
end

bus:read_block_data_reg()

-- @param addr integer 7-bits device address
-- @param reg integer 1-byte register number
-- @return table, string array of 1-byte integer values and error string
function bus:read_block_data_reg(addr, reg)
end

Reads a data from a designated SMBus register. When read fails, error will contain a non-nil string. If read succeeds error will be nil.

Example

local values, error = bus:read_block_data_reg(0x5A, 0xCF)
if error then
enapter.log('read block data failed: '..error, 'error')
else
enapter.log('read block data: '..inspect(values))
end

bus:write_block_data_reg()

-- @param addr integer 7-bits device address
-- @param reg integer 1-byte register number
-- @param values table array of 1-byte integer values
-- @return string error
function bus:write_block_data_reg(addr, reg, values)
end

Writes a data to a designated SMBus register. When write fails, error will contain a non-nil string. If write succeeds error will be nil.

Length of the values should be up to 32.

Example

local error = bus:write_block_data_reg(0x5A, 0xCF, {0x00, 0xF1, 0xF3, 0xF9, 0x00})
if error then
enapter.log('write block data failed: '..error, 'error')
end

bus:read_i2c_block_data_reg()

-- @param addr integer 7-bits device address
-- @param reg integer 1-byte register number
-- @param max_len integer maximum size of a data
-- @return table, string array of 1-byte integer values and error string
function bus:read_i2c_block_data_reg(addr, reg, max_len)
end

Reads a bytes block from a start register. When read fails, error will contain a non-nil string. If read succeeds error will be nil.

The max_len should be a positive and less or equal 32.

Example

local values, error = bus:read_i2c_block_data_reg(0x5A, 0xDF, 12)
if error then
enapter.log('read I²C block data failed: '..error, 'error')
else
enapter.log('read I²C block data: '..inspect(values))
end

bus:write_i2c_block_data_reg()

-- @param addr integer 7-bits device address
-- @param reg integer 1-byte register number
-- @param values table array of 1-byte integer values
-- @return string error
function bus:write_i2c_block_data_reg(addr, reg, values)
end

Writes bytes block to a device from a start register. When write fails, error will contain a non-nil string. If write succeeds error will be nil.

Length of the values should be up to 32.

Example

local error = bus:write_i2c_block_data_reg(0x5A, 0xDF, {0xBB, 0xBA, 0xFA})
if error then
enapter.log('write I²C block data failed: '..error, 'error')
end

bus:close()

-- @return string error
function bus:close()
end

Closes the connection to the remote device. When close fails, error will contain a non-nil string. If close succeeds error will be nil.

Example

error = bus:close()
if error then
enapter.log('close failed: '..error, 'error')
end

All Rights Reserved © 2025 Enapter AG.