I2C Structure Changes#

i2c_hal.h Changes#

Target Changes

Backward Compatible

Platform

OS

7.2.2.0

New member interrupt_timeout_ms is added in i2c_hal_send_info_t/i2c_hal_recv_info_t/i2c_hal_sendrecv_info_t. struct in HAL header file (i2c_hal.h). interrupt_timeout_ms is set by the user. For no timeout, set interrupt_timeout_ms to I2C_TIMEOUT_INFINITE macro, which translates to infinite timeout (No timeout).

7.2.3.0

A new header file, nvi2c_common.h, is included by i2c_hal.h, which exports I2C_TIMEOUT_INFINITE macro to both HAL and the user.

HAL

HAL supports timeout and “No timeout” when waiting for HW interrupt. HAL should use the interrupt_timeout_ms variable, which Core driver passes, to determine the timeout value.

No

NSR, SR

QNX only

Migration Path

Dimensity C-X1 to Dimensity C-X1

Migration Release Path

6.x to 7.x

Migration Rationale

Refer to DOS_UREQ_010 in the NVIDIA DriveOS Safety Manual. The customer should handle timeout to avoid an extra kernel call (TimerTimeout())

Steps to Migrate

HAL supports timeoutand “No timeout” when waiting for HW interrupt. HAL should use the interrupt_timeout_ms variable, which Core driver passes, to determine the timeout value.

DCMD_I2C_SEND/DCMD_I2C_RECV/DCMD_I2C_SENDRECV Changes#

Target Changes

Backward Compatible

Platform

OS

Release 7.2.1.0 added interrupt_timeout_ms in the tail of i2c_send_t/i2c_recv_t/i2c_sendrecv_tstruct; users can define the timeout(unit: ms) value in DCMD_I2C_SEND/DCMD_I2C_RECV/DCMD_I2C_SENDRECV, but the member is not used.

Release 7.2.2.0 allows use of this new timeout variable, input by the I2C user to specify the timeout. You do not want a timeout, set the interrupt_timeout_ms to I2C_TIMEOUT_INFINITE.

No

NSR, SR

QNX only

Migration Path

  • Orin to Thor

Release Migration Path

6.x to 7.x

Migration Rationale

The change is for safety and scalability. For additional information, refer to DOS_UREQ_010 in the NVIDIA DRIVE OS Safety Manual.

Steps to Migrate

Add an interrupt_timeout_ms variable in the tail of i2c_send_t/i2c_recv_t/i2c_sendrecv_t struct. The macro I2C_TIMEOUT_INFINITE (0U) is defined in libs/include/nvi2c_devctl.h. If you do not want to set a timeout, assign interrupt_timeout_ms to I2C_TIMEOUT_INFINITE

New nvi2c_common.h Header File#

Target Changes

Backward Compatible

Platform

OS

Release 7.2.3.0 adds a header file, nvi2c_common.h, which is included by nvi2c_devctl.h and i2c_hal.h

Yes

NSR, SR

QNX only

Migration Path

  • Orin to Thor

Release Migration Path

7.0 to 7.2

Migration Rationale

I2C_TIMEOUT_INFINITE should be exposed to partners (i2c_hal.h)

Steps to Migrate

The change to define to define I2C_TIMEOUT_INFINITE does not require action from customers. The macro I2C_TIMEOUT_INFINITE (0U) is defined in libs/include/nvi2c_common.h. If you do not want to set a timeout, assign interrupt_timeout_ms to I2C_TIMEOUT_INFINITE

i2c_send_t, i2c_recv_t, and i2c_sendrecv_t struct Changes#

Target Changes

Backward Compatible

Platform

OS

In 7.2.1.0:

Removed the stop variable in i2c_send_t/i2c_recv_t/i2c_sendrecv_t struct

Added an interrupt_timeout_ms variable in the tail of i2c_send_t/i2c_recv_t/i2c_sendrecv_t struct

No

NSR, SR

QNX only

Migration Path

  • Orin to Thor

Migration Rationale

The stop flag was removed from the i2C command. Instead, it is sent at the end of every i2c devctl call.

Refer to DOS_UREQ_010 in the NVIDIA DriveOS Safety Manual: the user should handle the timeout

Steps to Migrate

Remove the stop variable in i2c_send_t/i2c_recv_t/i2c_sendrecv_t struct

Add an interrupt_timeout_ms variable in the tail of i2c_send_t/i2c_recv_t/i2c_sendrecv_t struct. The macro I2C_TIMEOUT_INFINITE (0U) is defined in libs/include/nvi2c_devctl.h. If you do not want to set the timeout, assign interrupt_timeout_ms to I2C_TIMEOUT_INFINITE.

Warning

interrupt_timeout_ms occupies the same struct slot that stop previously occupied. Do not leave the field uninitialized — old code that set stop = 1 will now be interpreted as a 1 ms timeout, which can produce intermittent timeout errors that are hard to debug. Either set interrupt_timeout_ms to a deliberate value or to I2C_TIMEOUT_INFINITE (0U) when no timeout is required.

I2C/slave_addr Custom-Ability Syntax and @usage Doc Taxonomy#

Target Changes

Backward Compatible

Platform

OS

The documentation contract for the I2C devctl entry points was refreshed:

  • The I2C/slave_addr custom-ability grammar changed from {List of _slave_address_} (with bit[11:8] = inst+1 and bit[7:0] = addr) to a sub-range value form 0xWXYZ where WX = inst + 1 and YZ = slave address. Single ability values (for example, 0x336) and ranges (for example, 0x118-0x122) are now supported.

  • The supported I2C instance range was extended from [0..8] (Orin only) to [0..8] for Orin and [0..16] for Thor on DCMD_I2C_SEND, DCMD_I2C_RECV, DCMD_I2C_SENDRECV, DCMD_I2C_STATUS, and DCMD_I2C_BUS_RESET.

  • The @usage doc-contract was reformatted to “Allowed execution state” and gained “Implementation ASIL: ASIL D” and “Maturity: GA” tags.

No. Source rebuilds, but runtime behavior changed.

SR

QNX

Migration Path

  • Orin to Thor

Migration Release Path

6.5.4.2 to 7.2.5.0

Migration Rationale

Aligns with the new ability-grammar across the privilege manager and adds Thor-class platform documentation.

Steps to Migrate

  1. Integrators provisioning the I2C/slave_addr custom ability must migrate old-style {List of _slave_address_} entries to the new sub-range value format (0xWXYZ, with optional range syntax).

  2. Update any I2C-instance-bound integration assumptions to the wider [0..16] range when targeting Thor.