i3c_peripheral_programmers_model
i3c_peripheral_programmers_model
Revision history
Revision Date Description Author
1.3 10/23/19 Major update to Map scheme with auto-map and PK
new MAPCTRL register.
1.2d 01/27/19 05/16/19 Added new RSTACTTIME register. PK
06/03/19 06/18/19 New optional Regs: CCCMASK, HDRCMD,
VGPIO.
Added ERRWARNMASK.
DYNADDR now reads back with causing CCC if
writable DYNADDR reg by param.
HDRCMD now 2 bits to control which.
1.1 03/13/18 10/5/18 Added Mapped address handling in DYNADDR PK
10/12/18 10/20/18 and new MSGMAPADD register.
10/23/18 11/09/18 Added SLVRST cause register to STATUS.
12/21/18 DYNADDR has support for read-back, NACK
control, and 10bit static addr (1). Also, EXTDATA
now in CTRL to allow IBI data after MDB using
TXFIFO.
Added MAPIDX to CTRL and moved EXTDATA.
Added I2CREV (ID) if i2c device id used to IDEXT
register.
Added IBI FIFO support regs.
Show SLVRST in INTSET/INTCLR
Added WDATAB1 for byte-only for DMA (no END
bits)
1.04c 03/17/17 4/15/17 Spec should now be complete to match the Slave PK
6/29/17 use. Added some clarifications. Clarified some
more details on errors.
Added note on when EVENT status is signaled.
IBIOK and the like now IBIDIS.
Vendor ID and Time control freq/acc can be an
MMR now.
Added OFFLINE and DYNADDR optional use.
0.91d 11/21/16 Added DDRMATCH status and moved PK
CHANDLED and EVENT and EVDET.
Added TXFULL and RXEMPTY bits as well as
OWRITE error (over write). Clarify status raw bits
that are SDR only vs. HDR. S0/S1 handling.
0.9c 08/22/16 ERRWARN vs. error. CTRL bit to flush TB buff. PK
Now just WDATAB and WDATABE and
RDATAB. Removed END from DATACTRL.
Moved FLUSH to 0.
BAMATCH register field, FLUSHFB added.
Mistake in the offset of CONFIG in title.
0.8d 7/30/16 Added more status/interrupt causes. PK
Added CCC vs. CHANDLED. Fixed INTSTAT on
CHANDLED. Defined ID reg.
0.3 4/4/16 Updated with new regs and config info. PK
0.1 10/11/15 1st draft – requirements and arch PK
Contents
1. Introduction ............................................................................................................. 4
2. Master vs. Slave for I3C ......................................................................................... 4
2.1 Requirements for Master ........................................................................................... 5
2.2 Requirements for Slave ............................................................................................. 5
2.3 I3C Slave acting as a normal I2C Slave on I3C buses .............................................. 5
2.4 Understanding Offline and Hot-Join for re-joining bus............................................... 5
2.5 Reset the peripheral safely in a system ..................................................................... 6
2.6 Use of Mapping (when enabled) for multiple virtual Slaves ...................................... 7
3. Registers of Digital block ...................................................................................... 7
3.1 CONFIG @ 0x004 – I3C Configuration register ...................................................... 10
3.2 STATUS @ 0x008 – I3C Status register ................................................................. 12
3.3 CTRL @ 0x00C – I3C Control register .................................................................... 15
3.4 INTSET, INTCLR, INTMASKED @ 0x010, 0x014, 0x18 – Interrupt
enable control registers (if configured for Interrupts) ............................................... 16
3.5 ERRWARN @ 0x01C – I3C Error and Waning register .......................................... 18
3.6 DMACTRL @ 0x020 – DMA Control register (if configured for DMA) ..................... 19
3.7 DATACTRL @ 0x02C – Data control register (and FIFO if configured for
FIFO) ........................................................................................................................ 20
3.8 WDATAB @ 0x030 – Write Byte Data (to-bus) register .......................................... 21
3.9 WDATABE @ 0x034 – Write Byte Data as End (to-bus) register ........................... 22
3.10 MWDATAH @ 0x038 – Write Half-word Data (to-bus) register............................... 22
3.11 MWDATAHE @ 0x03C – Write Half-word Data as End (to-bus) register ............... 22
3.12 RDATAB @ 0x040 – Read Byte Data (from-bus) register ...................................... 22
3.13 RDATAH @ 0x048 – Read Half-word Data (from-bus) register .............................. 23
3.1 WIBIDATA @ 0x050 – Write IBI Extended Byte Data register ................................ 23
3.1 WDATAB1 @ 0x054 – Byte-only Write Byte Data (to-bus) register ........................ 23
3.2 CAPABILITIES(2) @ 0x05C 0x060 – Capabilities info register............................... 24
3.3 DYNADDR @ 0x064 – Dynamic Address register (and Map control) ..................... 26
3.4 MAXLIMITS @ 0x068 – Maximum limits set by I3C Master (if configured
for Limits) ................................................................................................................. 28
3.5 PARTNO @ 0x06C – Register to allow Application to set I3C Part
number ID (if configured for Part-number from app) ............................................... 28
3.6 IDEXT @ 0x070 – Register to allow Application to set I3C ID
components (if configured for ID parts from app) .................................................... 29
3.7 VENDORID @ 0x074 – Register to allow Application to set I3C Vendor
ID (if configured for VID from app) ........................................................................... 29
3.8 TCCLOCK @ 0x078 – Register to allow Application to indicate
Frequency and accuracy of time-control clock (if enabled) ..................................... 29
3.9 MSGMAPADDR @ 0x07C – Indicates matching DA or SA from last
messages ................................................................................................................. 30
3.10 RSTACTTIME @ 0x100 – Set timing rules for SlaveReset recovery ...................... 30
3.11 VGPIO @ 0x104 – Control VGPIO mechanism ...................................................... 30
3.12 HDRCMD @ 0x108 – Hold HDR Cmd byte vs. into RXFIFO .................................. 31
3.13 CCCMASK @ 0x10C – Mask for Unhandled CCCs ................................................ 31
3.14 ERRWARNMASK @ 0x110 – Mask for ERRWARN reg bits to form
status bit ................................................................................................................... 32
3.15 MAPCRTLn @ 0x11C to 0x13C – Control of MAP features, if enabled .................. 32
3.16 ID @ 0xFFC – Optional BlockID .............................................................................. 33
NXP Semiconductors I3C
1. Introduction
MIPI I3C is a follow on to i2c which has major improvements in use and power, as well as providing an
alternative to SPI for mid-speed. In particular:
• 2 wire multi-drop bus capable of 12MHz clock speeds with up to 11 devices
o While using standard pads (vs. i2c special pads) with 4mA drive
o Slave addresses are dynamically assigned – does not require a static address
▪ But, slaves may have a static address at start
o Slaves may use inbound clock as the peripheral clock
▪ So devices may have slow/inaccurate clocks internally
o For read from Slave, Slave normally ends the read, but Master may terminate
▪ Unlike i2c and SPI with the problems of Master having to “know” length
• In-Band interrupts, allowing Slaves to notify Master
o Can be both equivalent to a separate GPIO, but can also be directly data bearing
o Prioritized so that if multiple Slaves wish to interrupt at the same time, the order is resolved
▪ Dynamic addresses used for this, so priority controlled by Master
o Interrupts can be started even when Master is not active on the bus, and yet no free running
clock needed
o Time-stamping option to allow resolution of initial event vs. when interrupt gets through
• Built-in Commands in separate “space” to not collide with normal Master->Slave messages
o Controls bus behavior, modes and states, low power state, enquiries, etc.
o Has additional room for new built-in commands to be used by other groups
• Organized forms of multi-master:
o Slave which can request Master to allow it to message another Slave, yet not needing to
generate its own clock – called Peer-to-Peer
o Secondary Masters which can use clean handoffs between each Master
• Hot-join onto bus allows devices to come on-line later than initial bus bringup
o May be due to late wake up (power up) or physical insertion
o Provides clean method for notification.
• Mixed i2c and i3c capable
o I3C has support for certain legacy i2c devices on the bus
o I3C Slave devices capable of operating on i2c buses
o Also support for bridging (to i2c, SPI, UART, etc.)
• High data rate modes also optionally available
o Only Master and the specific Slave has to support – other Slaves know how to ignore
o Has an HDR-DDR form which is about 2x the data rate of SDR (so about 20Mbps)
o Has an HDR-TSP (ternary symbols) which are up to 3x the data rate (so about 30Mbps)
• Slaves as small as <2K gates.
o Allowing for fully state machine driven as well as using processor
• Masters as small as 2.5K gates
o Relies on processor to handle
The I3C peripheral supports the full feature set, but uses parameterization to allow reduction of the logic to
what is needed.
2. If DA is retained in the peripheral (e.g. with SRFFs) then the CONFIG.OFFLINE bit will be used (see
below).
3. If DA is retained in separate always-on memory, then the DYNADDR register as writable mechanism
may be used along with the CONFIG.OFFLINE bit.
The OFFLINE bit of the CONFIG register may be set when SLVENA is set to 1. This will cause the peripheral
to safely rejoin the bus. It does this by ensuring the I3C bus is not in HDR mode, using the same approach as
S0/S1 exit does: wait for 1st of HDR Exit Pattern, or 60µs of SCL and SDA unchanging.
Note that after using OFFLINE, the peripheral still cannot safely use IBI until it sees a STOP (which ensures
that the next START is safe to use for IBI).
If the App needs to do an IBI right away, it should wait for the 1st of STOP (see STATUS), or 200µs of SCL
and SDA being High. This can be done using the STATUS and INTSET controls. If the STATUS indicates the
bus is not busy and the peripheral will interrupt on START or STOP, then use of a timer to measure 200µs can
be used. If the timer goes off with no START or STOP, then it is safe to use IBI. If a START causes an
interrupt, the timer should be turned off and STOP waited for. If STOP causes an interrupt, it is safe to use IBI.
assertion and de-assertion to the PCLK (e.g. from HCLK) since flops in other domains will be inactive
and not affected by D input on de-assertion.
0x01C R/W1C ERRWARN Error and Warning state from Always available
protocol errors and issues.
Related to ERRWARN status and
interrupt.
0x02C RW DATACTRL Allows control of data buffering FIFO Fields only if FIFO
and indicates current buffer state. enabled.
If FIFO enabled, this is also the
FIFO control.
0x030 WO WDATAB Write a byte of data, including use Available unless external
of a 9th bit to mark as end (last FIFO
byte)
0x050 WO, WIBIDATA Writes to IBI FIFO (2 entry) if Only if enabled, else normal
RO EXTDATA is set in CTRL (bytes TXFIFO and so
after MDB) and IBI FIFO enabled. WDATAB/WDATAH are used
Reads back with 1 if space to
take another byte.
0x054 RW WDATAB1 Byte only WDATAB for DMA use. Always available since no
Ignores bits [31:8]. extra cost.
0x064 RO/RW DYNADDR Dynamic address once assigned, Always used. May be RO, or
else 0. may be configured to be RW
0x068 RO/RW MAXLIMITS Indicates the limits set by the If enabled to track this.
Master (or the original requested
limits).
0x07C RO MSGMAPADDR Returns the index of the matching Only when mapped
Dynamic address or Static addresses are enabled and
address. used.
0x100 RW RSTACTTIME Sets the RSTACT time response Only when enabled as a
values. register vs. parameter.
0x108 RO HDRCMD Holds HDR Cmd value if enabled Only if enabled to support and
(vs. RXFIFO) only if enabled by CONFIG.
0x10C RW CCCMASK Used to mask on/off Unhandled Only if enabled, else all
CCCs. unhandled go to App.
0x110 RW ERRWARNMSK Used to Mask on/off ERRWARN Only if enabled, else all
bits that contribute to contribute.
STATUS.ERRWARN (and
interrupt)
0x11C, RW MAPCTRL0 up to Optional MAP control registers for Only if MAP enabled, and
0x120, MAPCTRL8 primary and MAP regs (vs. number of registers based on
0x124, DYNADDR). Features based on MAP_CNT, and features
0x128, config. based on MAP_DA_AUTO
0x12C,
0x130,
0x134,
0x138,
0x13C
8 RW IDRAND If 1, PARTNO is a random value. If 0 (or Only if enabled for in the block
not configured for), PARTNO is a part along with PARTNO register.
number and instance.
9 RW OFFLINE If 1 when SLVENA set to 1, will wait for Only possible if CLK_SLOW is
either 60us of bus quiet or HDR Exit used, so only if IBI or MR or HJ.
Pattern; this ensures that bus is not in HDR
mode and so can safely track SDR.
11:10 RW HDRCMD If not 0, then HDR command (e.g. HDR- Only if enabled to support.
DDR Cmd) byte will be put into the
HDRCMD register vs. in RXFIFO. The
interpretation is:
Value Meaning
3 Reserved
23:16 RW BAMATCH Bus Available condition match value for Only if enabled for events such
current “Slow clock”. This provides the as IBI or MR or HJ, and if
count of the slow clock to count out 1us (or enabled to provide this as a
more) to allow an IBI to drive SDA Low register.
when the Master is not doing so. The max Width is limited to
width, and so max value, is controlled by
CLK_SLOW_BITS
the block.
Default: set by parameters if configured.
31:25 RW SADDR If allowed by the block: Sets i2c 7 bit Static If enabled to use one and to be
address, else should be 0. provided by SW. Block may
provided in HW as well.
Activity status
1 RO STMSG Is 1 if this bus Slave is listening to the bus traffic or Will include
responding. If STNOSTOP=1, then this will be 0 when a unhandled
non-matching address seen until next repeated START or CCCs
STOP.
10 R/W1C STOP A STOP state was present on the bus since last cleared.
The STNOTSTOP state will also indicate if in stop.
Note: A fast STOP/START combination may not trigger this
status. START will always be set in that case. This bit is
from a stopped state being detected.
11 RO RX PEND Receiving a message from Master, which is not being See also
handled by block (not a CCC internally processed). FIFO status
For all but External FIFO, this uses DATACTRL RXTRIG, in
which defaults to not-empty. DATACRTL
If DMA is enabled for RX, DMA will be signaled as well. if FIFO is
available
Will self-clear if data is read (FIFO and non-FIFO).
13 R/W1C DACHG The Slave Dynamic Address has been assigned, re-
assigned, or reset (lost) and is now in that state of being
valid or none. Actual DA can be seen in the DYNADDR
register.
Note that this will also be used when MAP Auto feature is
configured. This will be changing one or more MAP items.
See DYNADDR and/or MAPCTRLn. DYNAADDR for the
main DA (0) will indicate if last change was due to Auto-
MAP.
16 R/W1C HDRMATCH An HDR command matched this device’s I3C Dynamic Only if HDR
Address. The Command will be available as the 1st byte is
and RXPEND will be set, whether read or write. The MSb supported.
of that command byte also indicates if a read or a write.
If a read, and there are to-bus bytes waiting, the command
will be ACKed and the data sent back, else it will be
NACKed.
Note that when this is set, the ERRWARN bit should be
checked, as the HPAR error may have be encountered
after signaling this (the parity is after the destination
address and CMD).
18 R/W1C EVENT Slave: Pending IBI, MR, or Hot-Join has been sent as Only if
requested. See upper status for details. configured
Note that for IBI, this occurs on the ACK if no IBI byte, and to support
after the 1 IBIDATA byte has been sent. So, if time control events.
is used, those will go out after this EVENT is signaled.
19 R/W1C SLVRST Slave Reset to Peripheral (not whole chip). This helps If Slave
application do follow up such as re-initialization. Reset and
RSTACT
Note : For Master MSTATUS, this is NOWMASTER bit.
are
supported
24 RO IBIDIS Is 1 if IBIs are disabled at this time. Note that CTRL Only if
requests will be held off while disabled. enabled for
block to
process.
25 RO MRDIS Is 1 if Master Requests are Disabled at this time. Note that Only if
CTRL requests will be held off while disabled. enabled for
block to
process.
block to
0 No Latency – normal bus operations
process.
1 1ms of latency
2 100ms of latency
3 10s of latency
1:0 RW EVENT If set to non-0, will request an event. Once requested, If block is
STATUS.EVENT and EVDET will show the status as it configured for
progresses. Once completed, the field will automatically one or more of
return to 0. Once non-0, only 0 can be written (to cancel) these.
until done. Time control is
separately
Value Meaning configured.
0 Normal mode. If set to 0 after was a non-0
value, will cancel if not already in flight.
7:4 RW MAPIDX Index of Dynamic Address that IBI is for. This is 0 for the Only if Mapping
main or base Dynamic Address, or can be any valid index. is enabled
See DYNADDR register for more details.
15:8 RW IBIDATA Data byte to go with an IBI, if enabled for it. If enabled If block is
(was in BCR), then it is required. configured for
IBI data.
19:16 RW PENDINT Should be set to the pending interrupt that GETSTATUS Controlled with
CCC will return. This should be maintained by the the CCC
Application if used and configured, as the Master will read handling
this. parameter.
If not configured, the GETSTATUS field will return 1 if an
IBI is pending, and 0 otherwise.
31:24 RW VENDINFO Should be set to the Vendor Reserved field that Controlled with
GETSTATUS CCC will return. This should be maintained the CCC
by the Application if used and configured, as the Master handling
will read this. parameter.
If not configured, the GETSTATUS field will always return
a 0.
3.4 INTSET, INTCLR, INTMASKED @ 0x010, 0x014, 0x18 – Interrupt enable control
registers (if configured for Interrupts)
The Interrupt registers, if enabled in the block, allow masking interrupt sources as well as checking which have
activated. The normal method is to Enable an interrupt and then once it fires, it is either cleared by writing the
STATUS register or cleared by action on the corresponding data register. The Interrupt is level held, meaning
it stays set until the cause is cleared one way or the other. The block prevents races so that if a new event
comes in, it will not be lost.
The table below shows all 3 registers, with the Type indicating INTSET (R/W1S), INTCLR (WO), and
INTMASKED (RO, is STATUS&INTSET).
INTSET allows setting enables for interrupts (connecting the corresponding STATUS source to causing an
IRQ to the processor).
INTCLR allows clearing interrupt enables without read-modify-write problems.
INTMASKED allows checking status bits in terms of which are holding the IRQ, if any.
11 R/W1S, RX PEND Interrupt when Receiving a message from Master, FIFO and
W1C, which is not being handled by block (excludes CCCs DMA use
and RO being handled automatically). only if
If FIFO, then RX fullness trigger. configured
If DMA, then message end.
See also REQ in STATUS for context.
14 R/W1S, CCC For CCCs not handled by the block, RXPEND will For CCCs
W1C, also interrupt and the STATUS REQ field will that the
and RO indicate it is a CCC. block is
Note that the handling of broadcast vs. direct write not
vs. direct read are all subtly different. The direct enabled
read ones likely do not provide enough time to to
respond, but the i3c spec allows a single retry, process.
buying more time.
configured
features.
16 R/W1S, DDRMATCHED Interrupt when DDR matched for Read or Write Only if
W1C, command. HDR
and RO enabled
18 R/W1S, EVENT Slave: Interrupt when Pending IBI, MR, or Hot-Join Only if
W1C, has been sent as requested. See STATUS for configured
and RO details (EVDET). to support
events.
19 R/W1S, SLVRST Slave: SlaveReset pattern detected and action was Only if
W1C, set to reset peripheral. Application should reset SLVRST
and RO peripheral or verify it is correct. This should not be is
unmasked. configured
0 R/W1C ORUN The internal from-bus buffer/FIFO was overrun (too many chars coming in
and not drained by the app fast enough).
1 R/W1C URUN The internal to-bus buffer/FIFO was underrun during data read (app did
not provide the data fast enough). The END bit or register should be used
if that was the last one.
2 R/W1C URUNNACK The internal to-bus buffer/FIFO was underrun in the read header and so
the block NACKed the header.
3 R/W1C TERM The Master terminated a read from Slave when an END was not set (on
same or previous).
4 R/W1C INVSTART Invalid start with SCL falling while SDA=1 in STOP condition.
5 R/W1C IBIURUN If EXTDATA is used in CTRL, this will signal if the TX or IBI FIFO
underruns before an END mark.
8 R/W1C SPAR SDR Parity error on message from Master. This will also set the
GETSTATUS Protocol Error sticky bit (cleared on GETSTATUS read).
For Read, this will be set if a Read Abort (timeout) occurs due to Master
not driving clock for >100µs during an I3C SDR Read.
9 R/W1C HPAR HDR Parity error or framing error on message from Master. Note that the
corresponding CMD or Data that had the error will normally be in the RX
buffer (read via RDATAB).
10 R/W1C HCRC HDR-DDR CRC error on message from Master. This calls into question
the data from the whole DDR command frame. Note that this includes an
HDR Restart or Exit being issued before an HDR-DDR message from
Master is complete.
11 R/W1C S0S1 S0 or S1 error has occurred and the Slave is locked waiting on an HDR
Exit Pattern. Writing 1 to this will cause it to release the lock, but that
should be used with great care. Normally, it will clear automatically when
an Exit Pattern is detected. So, writing 1 should only be used under
controlled circumstances to avoid problems. It will then wait for a START
(or repeated START) or STOP to operate normally.
16 R/W1C OREAD The RDATAB register was read for more bytes than were available by
app.
3.6 DMACTRL @ 0x020 – DMA Control register (if configured for DMA)
The DMA Control register allows for DMA to be used for inbound messages and outbound messages. This is
only available if configured for it.
DMA is limited in value for Slave use. This is because the Slave has to be reactive to what happens. The two
common use models:
1. From-bus collection to avoid being overrun. The CONFIG MATCHSS bit is set, and then the processor
enables the interrupts for START, and STOP, as well as enabling the DMA to collect the data. The
START or STOP interrupt will only occur after a message directed to the Slave (MATCHED bit set),
and the DMA copied data can then be examined.
2. To-bus for larger reads. Since I3C and I2C reads are preceded by a write which indicates what will be
read (or in response to an IBI from the Slave), the DMA can be used to push through the data.
Note that for I3C, the last value needs to be handled by the processor unless the DMA moves wider
words to be able to set the END bit (i.e. 16-bit values when byte mode or 32-bit values when in half-
word)
Note that for I2C, the last value is determined by the Master, so the DMA may end early or may run
out and the Master still wants more.
1:0 RW DMAFB DMA Read (From-bus) trigger. If enabled with 1 or 2, If configured for
will request DMA on RX trigger (see DATACTL). It DMA and not
will request until empty unless DMA setup as trigger. external FIFO.
Note: will cancel on ERRORWARN (since cannot be
as planned).
Value Meaning
Value Meaning
Value Meaning
0, 1 Byte. Default=1
3 reserved
3.7 DATACTRL @ 0x02C – Data control register (and FIFO if configured for FIFO)
The Data control register simply assists in data control when no FIFO, and assists in FIFO when the FIFO is
available (regardless of size). This allows some control over the FIFO behavior. In particular, it allows control
of when to interrupt on fullness/emptiness and also controls behavior related to width, when not 1 byte wide.
5:4 RW TXTRIG Trigger level for TX emptiness If Internal FIFO enabled for to-bus, has
when FIFOed. Affects interrupt full meaning. If just 2 or 3 byte (ping
and DMA (if enabled). The defaults pong) buffer, then only 0 is special to
is 3 mean “empty”. That is, 0 will cause
TXNOTFULL to be true only if TX FIFO
Value Meaning is empty, so Half word write can be
used; 1, 2, and 3 will set TXNOTFULL
0 Trigger on empty
when not full.
1 Trigger on ¼ full or less
7:6 RW RXTRIG Trigger level for RX fullness when If Internal FIFO available for from-bus,
FIFOed. Affects interrupt and DMA has full meaning. If just 2 or 3 byte (ping
(if enabled). pong) buffer, then only 3 is special to
mean at least 2 bytes in). That is, 3 will
Value Meaning set RXPEND only if 2 or 3 bytes are in
RX FIFO, so Half word read can be
0 Trigger on not empty
used; 0, 1, and 2 will set RXPEND if not
1 Trigger ¼ or more full empty.
20:16 RO TXCOUNT Count of bytes in TX Always Available, but has less meaning
if external FIFO is used (since this will
28:24 RO RXCOUNT Count of bytes in RX be only of local buffers).
30 RO TXFULL Is 1 if TX is full
optional in i2c. Note that for HDR-DDR, the byte with the END
must be an even (2nd, 4th, 6th, etc) since DDR is byte-pairs.
7:0 WO DATA0 1st Byte to send to Master If not external FIFO and if configured for half-
word data
15:8 WO DATA1 2nd Byte to send to Master
A byte should not be read unless there is data waiting, as indicated by the RXPEND bit being set in the
STATUS register.
7:0 RO LSB 1st byte read from Master If not external FIFO and if configured for
half-word data
15:8 RO MSB 2nd byte read from Master
0 RO FREE If reads 1, the DATA buffer can take another byte, If configured for IBI EXT
and may be written DATA and IBI FIFO
31 WO CLEAR If 1, this clears the FIFO and the lower bits are
ignored.
31:8 - - Ignored
CAPABILITIES at 0x060
15:12 RO CCCHANDLE Indicates who handles CCCs between block and app:
• Bit 0 = 1: Block handles events, activities, status, HDR, and if
enabled for it, ID and static address related
• Bit 1 = 1: Block handles max read and write length as well as max
data speed.
22 - - reserved
25:23 RO EXTFIFO Indicates External FIFOs is enabled. If not, check FIFOTX and FIFORX for
internal FIFO.
• 0 = no external FIFO.
• 1 = standard available/free external FIFO
• 2 = request track external FIFO
• 3= reserved
CAPABILITIES2 at 0x05C
3:0 RO MAPCNT Is 0 if no mapping (DYNADDR used to add more Static and/or Dynamic
addresses to act as virtual slaves). Else, indicates how many are allowed.
7 - - reserved
9 RO IBIFIFO Supports 2 entry FIFO for IBI EXTDATA using WIBIDATA register
15:10 - - reserved
19:18 RO GROUP Is 0 if does not supports v1.1 Group addressing, else indicates number of
groups as 1, 2, 3. Groups use mapping, so MAPCNT must be same or greater.
20 - - reserved
31:24 - - reserved
Mapping: The MAPIDX/MAPSA model allows writing additional DAs (and SAs) into a list – number in list is
pre-configured; any with DAVALID=0 are never matched. The additional DAs may be based on the
SETBRGTGT CCC, or done by move (read current DA and then copy into upper map, then invalidate the 0
map) when matching ENTDAA over and over. Any mapped location can be invalidated by writing the MAPIDX
and DAVALID=0; note that the KEY must be set to permit this. The mapped ones are not reset by the RSTDA
CCC. See also the MSGMAPADDR register.
Note that to copy the base DA to the mapped set, the configuration has to be setup to allow it, else they are
distinct mechanisms. If used for the copy model, then a special reset feature is allowed. In this case, the
DYNADDR register is written with KEY=0xCB19 and the rest 0. This will clear the DA and then self-clear. Note
that if in I3C mode, a base DA is required, so the last one should not be cleared or writing one with
DAVALID=1 is necessary.
NACK/ACK of Mapped DAs/SAs: the register also permits specific DAs (above the base) to NACK or ACK
writes or reads, such as for bridges when the endpoint is busy. The NACK should not be set for too long, or
the Master may think the slave is in an error state. The model is to write with KEY of 0xA731 and the MAPIDX
and DAVALID to select ACK or NACK.
Mapping: if write with MAPIDX!=0 and KEY=0, then next Read will return details on the Static or Dynamic
address at that location. If the read does not have MAPIDX !=0, then was not an acceptable location.
15:13 WO SA10B If not 0 when MAPSA is set, will store a 10bit static
address composed of {SA10B,DADDR}. Only one
static address may be stored this way, and it must
be MAPIDX==1.
31:16 WO and KEY Must set to 0xA4D9 to write DADDR (and set
RO DAVALID to 1). Base is only writable when slave is
not enabled (for restoral) unless mapping is
enabled. The mapped locations and base may be
written when slave is enabled, but care should be
taken to not be when there are transactions on the
I3C bus.
Reads back as 1 if overwritten, else is 0 if from
Master assigned, including when master changes it.
If Mapping is allowed, then writing with key of
0xCB19 is used to clear the base DA.
If Mapping is allowed, then writing with key of
0xA731 means that MAPIDX will indicate which
mapped address to set to ACK or NACK, such that
DAVALID =1 if ACK, =0 if NACK; this allows having
the address refuse write/read requests when NACK.
When using read back from map index (write with
MAPIDX!=0, KEY=0, read) bit [16] =1 if NACK, else
0.
3.4 MAXLIMITS @ 0x068 – Maximum limits set by I3C Master (if configured for
Limits)
The Max limits may or may not be enabled in the HW, including max read and write length. If they are, the
current setting (including default request) shows up in this register.
11:0 RW MAXRD Maximum read length. Must be between 16 and saturation at 4095 (means is set
to that or higher).
App should not set higher than Master sets, only smaller.
Default: non-0 if set by parameters in HW config.
27:16 RW MAXWR Maximum write length. Must be between 8 and saturation at 4095 (means is set
to that or higher).
App should not set higher than Master sets, only smaller.
Default: non-0 if set by parameters in HW config.
3.5 PARTNO @ 0x06C – Register to allow Application to set I3C Part number ID (if
configured for Part-number from app)
The Part number is normally hard coded into the hardware, but if the application needs to set it, this allows
that. It is only available if configured for a register based part number. Note that part number includes instance
as well. The application must write a value into this field since 0 is not normally valid.
3.6 IDEXT @ 0x070 – Register to allow Application to set I3C ID components (if
configured for ID parts from app)
The ID extension fields of Instance (from Part number), DCR, and BCR are normally set in the HW. But. If
configured, the Application must set them instead.
3:0 RW INSTANCE Set the Instance of the ID if configured. Would not be used if PARTNO is
provided by the application.
6:4 RW I2CREV If the I2C DeviceID is used, then this supports the revision. These 3 bits will
be ORed onto the constant ID.
15:8 RW DCR Set the DCR (device type) register if configured for it.
23:16 RW BCR Set the BCR (Bus capabilities) register if configured for it. This controls
features like Peer-to-peer or 2ndary master, Slow speed requirements, etc.
3.7 VENDORID @ 0x074 – Register to allow Application to set I3C Vendor ID (if
configured for VID from app)
The MIPI Vendor ID is normally hard coded into the hardware, but if the application needs to set it, this allows
that. It is only available if configured for a register based VID. The default will be set from the constant field
and so usually will be the chip vendor. If using the chip vendor ID, the PARTNO must then not collide with
other uses.
MIPI Vendor ID is available to all companies, MIPI member or not; it only takes a request via the mipi.org
website.
14:0 RW VID Should be set to the 15-bit MIPI Vendor ID of Only if provided, else is
developer of the firmware on this part. Default will be hard coded to ID of chip
chip vendor’s ID if supplied. vendor.
7:0 RW ACCURACY Clock accuracy in 1/10ths of %. So, If time control used and if Reg
1.5% is 15. form is selected.
15:8 RW FREQ Clock frequency in 0.5MHz steps (e.g. If time control used and if Reg
10MHz is 20). form is selected.
Default: set by parameters if
configured.
3:0 RO MAPLAST Matched address index for current or last matched If mapped address list
message. 0 for the base address. is enabled.
7:0 RW PERRSTTIM Time to recover, in milliseconds from the I3C If enabled for
peripheral being reset. MMR for this info
0 RW VCCCSEL If 1, selects the CCC model for VGPIO, else the DA model is If enabled for
used (which requires DYNADDR register to manage the DA). VGPIO
3.12 HDRCMD @ 0x108 – Hold HDR Cmd byte vs. into RXFIFO
This register is only used if the feature is configured and if enabled in CONFIG.HDRCMD. If so, this register
will hold the last Cmd byte when an HDR message is used (read or write). The NEWCMD bit will be set each
time a new Command (will coincide with the DDR interrupt/STATUS). It will auto-clear on read of this register.
This register will set the OVFLW bit if a previous value was overwritten without being read by the application. It
too will auto-clear once the register has been read.
7:0 RO CMD0 Will contain the last Cmd byte when enabled If enabled at all and if
and used. Note that for DDR, the top bit will be CONFIG.HDRCMD=1
1 if Read, 0 if Write.
NOTE: should be read when new to avoid
picking up a value in transition.
0 RW BASE If 1, any unhandled CCC in the range of 0 to 0x1F and 0x80 If enabled for
to 0x8F are passed to app, else they are suppressed. CCC masking
3.14 ERRWARNMASK @ 0x110 – Mask for ERRWARN reg bits to form status bit
The ERRWARN register contains I3C protocol errors and issues detected on the line. If any are set, they set
the STATYS.ERRWARN bit (and interrupt if enabled). This register allows masking them off so only some
form the status bit.
2 R/W URUNNACK
3 R/W TERM
4 R/W INVSTART
5 R/W IBIURUN
9 R/W HPAR
10 R/W HCRC
11 R/W S0S1
10:8 RO CAUSE Is how DA was last assigned; used with DACHG STATUS
bit/interrupt:
0 = No info. Is 0 if not configured to write DA.
0 RW ENA Is 1 if MAP entry is enabled. This could be a static or dynamic With MAP
address. enabled
11:9 RW SA10B If MAPCTRL1, this is SA10B for 10-bit extended address. Is 0, if If enabled for
normal address, else is 10-bit extension. 10bit
Below only if Auto MAP for DAA and register use (vs. constant). Not related to Auto DASA/AASA.
13 RW AUTO Is 1 if this slot is Enabled for Auto DAA. Will only apply if ENA=0 If Enabled
for Auto DAA
23:14 RW PID If 1 or more PID bits are to be replaced by register, this provides using MMR.
them. Only uses as many bits as configured for – up to 10 if DCR
Or
is used, up to 18 if no DCR.
31:14
31:24 RW DCR If DCR is to be replaced by register, this provides the DCR value.
31:0 RO ID Meaning is specific to each use. Default: Parameter sets this value.