RXDMAEN=B_0x0, TMODE=B_0x0, RMODE=B_0x0, HJACK=B_0x0, TSFSET=B_0x0, EXITPTRN=B_0x0, RSTPTRN=B_0x0, CFLUSH=B_0x0, EN=B_0x0, CRINIT=B_0x0, SDMAEN=B_0x0, RXTHRES=B_0x0, RXFLUSH=B_0x0, TXDMAEN=B_0x0, CDMAEN=B_0x0, NOARBH=B_0x0, SFLUSH=B_0x0, TXFLUSH=B_0x0, HKSDAEN=B_0x0, TXTHRES=B_0x0
I3C configuration register
EN | I3C enable (whatever I3C is acting as controller/target)
0 (B_0x0): I3C is disabled 1 (B_0x1): I3C is enabled |
CRINIT | initial controller/target role This bit can be modified only when I3C_CFGR.EN = 0. Once enabled by setting I3C_CFGR.EN = 1, I3C peripheral initially acts as an I3C target. I3C does not drive SCL line and does not enable SDA pull-up, until it eventually acquires the controller role. Once enabled by setting I3C_CFGR.EN = 1, I3C peripheral initially acts as a controller. It has the I3C controller role, so drives SCL line and enables SDA pull-up, until it eventually offers the controller role to an I3C secondary controller. 0 (B_0x0): target role 1 (B_0x1): controller role |
NOARBH | no arbitrable header after a START (when I3C is acting as a controller) This bit can be modified only when there is no on-going frame.
0 (B_0x0): An arbitrable header (7’h7E + RnW=0) is emitted after a START and before a legacy I2C message or an I3C SDR private read/write message (default). 1 (B_0x1): No arbitrable header |
RSTPTRN | HDR reset pattern enable (when I3C is acting as a controller) This bit can be modified only when there is no on-going frame. 0 (B_0x0): standard STOP emitted at the end of a frame 1 (B_0x1): HDR reset pattern is inserted before the STOP of any emitted frame that includes a RSTACT CCC command |
EXITPTRN | HDR Exit Pattern enable (when I3C is acting as a controller) This bit can be modified only when there is no on-going frame. This is used to send only the header to test ownership of the bus when there is a suspicion of problem after controller-role hand-off (new controller didn’t assert its controller-role by accessing the previous one in less than Activity State time). The HDR Exit Pattern is sent even if the message header {S/Sr + 0x7E addr + W } is ACKed. 0 (B_0x0): HDR Exit Pattern is not sent after the message header (MTYPE[3:0]=0001) 1 (B_0x1): HDR Exit Pattern is sent after the message header (MTYPE[3:0]=0001) to generate an escalation fault |
HKSDAEN | High-keeper enable on SDA line (when I3C is acting as a controller) This bit can be modified only when I3C_CFGR.EN=0. 0 (B_0x0): High-Keeper is disabled 1 (B_0x1): High-Keeper is enabled, and the weak pull-up is effective on the T bit, instead of the open-drain class pull-up. |
HJACK | Hot Join request acknowledge (when I3C is acting as a controller) After the NACK, the message continues as initially programmed (the hot-joining target is aware of the NACK and surely emits another hot-join request later on). After the ACK, the message continues as initially programmed. The software is aware by the HJ interrupt (flag I3C_EVR.HJF is set) and initiates the ENTDAA sequence later on, potentially preventing others Hot Join requests with a Disable target events command (DISEC, with DISHJ=1). Independently of the HJACK configuration, further Hot Join request(s) are NACKed until the Hot Join flag, HJF, is cleared. However, a NACKed target can be assigned a dynamic address by the ENTDAA sequence initiated later on by the first HJ request, preventing this target to emit an HJ request again. 0 (B_0x0): Hot Join request is NACKed 1 (B_0x1): Hot Join request is ACKed |
RXDMAEN | RX-FIFO DMA request enable (whatever I3C is acting as controller/target)
0 (B_0x0): DMA mode is disabled for RX-FIFO 1 (B_0x1): DMA mode is enabled for RX-FIFO |
RXFLUSH | RX-FIFO flush (whatever I3C is acting as controller/target) This bit can only be written. 0 (B_0x0): no action 1 (B_0x1): flush RX-FIFO |
RXTHRES | RX-FIFO threshold (whatever I3C is acting as controller/target) This threshold defines, compared to the RX-FIFO level, when the I3C_EVR.RXFNEF flag is set (and consequently if RXDMAEN=1 when is asserted a DMA RX request). RXFNEF is set when 1 byte is to be read in RX-FIFO (i.e. in I3C_RDR). RXFNEF is set when 4 bytes are to be read in RX-FIFO (i.e. in I3C_RDWR). 0 (B_0x0): 1-byte threshold 1 (B_0x1): 4-byte threshold |
TXDMAEN | TX-FIFO DMA request enable (whatever I3C is acting as controller/target)
0 (B_0x0): DMA mode is disabled for TX-FIFO 1 (B_0x1): DMA mode is enabled for TX-FIFO |
TXFLUSH | TX-FIFO flush (whatever I3C is acting as controller/target) This bit can only be written. When the I3C is acting as target, this bit can be used to flush the TX-FIFO on a private read if the controller has early ended the read data (i.e. driven low the T bit) and there is/are remaining data in the TX-FIFO (i.e. I3C_SR.ABT=1 and I3C_SR.XDCNT[15:0] I3C_TGTTDR.TGTTDCNT[15:0]). 0 (B_0x0): no action 1 (B_0x1): flush TX-FIFO |
TXTHRES | TX-FIFO threshold (whatever I3C is acting as controller/target) This threshold defines, compared to the TX-FIFO level, when the I3C_EVR.TXFNFF flag is set (and consequently if TXDMAEN=1 when is asserted a DMA TX request). TXFNFF is set when 1 byte is to be written in TX-FIFO (i.e. in I3C_TDR). TXFNFF is set when 4 bytes are to be written in TX-FIFO (i.e. in I3C_TDWR). 0 (B_0x0): 1-byte threshold 1 (B_0x1): 4-byte threshold |
SDMAEN | S-FIFO DMA request enable (when I3C is acting as controller) Condition: When RMODE=1 (FIFO is enabled for the status):
0 (B_0x0): DMA mode is disabled for S-FIFO 1 (B_0x1): DMA mode is enabled for S-FIFO |
SFLUSH | S-FIFO flush (when I3C is acting as controller) When I3C is acting as I3C controller, this bit can only be written (and is only used when I3C is acting as controller). 0 (B_0x0): no action 1 (B_0x1): flush S-FIFO |
RMODE | S-FIFO enable / status receive mode (when I3C is acting as controller) When I3C is acting as I3C controller, this bit is used for the enabling the FIFO for the status (S-FIFO) vs the received status from the target on the I3C bus. When I3C is acting as target, this bit must be cleared.
0 (B_0x0): S-FIFO is disabled, and the 1 (B_0x1): S-FIFO is enabled. |
TMODE | transmit mode (when I3C is acting as controller) When I3C is acting as I3C controller, this bit is used for the C-FIFO and TX-FIFO management vs the emitted frame on the I3C bus. A frame transfer starts as soon as first control word is present in C-FIFO. 0 (B_0x0): C-FIFO and TX-FIFO are not preloaded before starting to emit a frame transfer. 1 (B_0x1): C-FIFO and TX-FIFO are first preloaded (also TX-FIFO if needed (depending on the frame format) before starting to emit a frame transfer. |
CDMAEN | C-FIFO DMA request enable (when I3C is acting as controller) When I3C is acting as controller:
0 (B_0x0): DMA mode is disabled for C-FIFO 1 (B_0x1): DMA mode is enabled for C-FIFO |
CFLUSH | C-FIFO flush (when I3C is acting as controller) This bit can only be written. 0 (B_0x0): no action 1 (B_0x1): flush C-FIFO |
TSFSET | frame transfer set (a.k.a. software trigger) (when I3C is acting as controller) This bit can only be written. When I3C is acting as I3C controller: Note: If this bit is not set, the other alternative for the software to initiate a frame transfer is to directly write the first control word register (i.e. I3C_CR) while C-FIFO is empty (i.e. I3C_EVR.CFEF=1). Then, if the first written control word is not tagged as a message end (i.e I3C_CR.MEND=0), it causes the hardware to assert the flag I3C_EVR.CFNFF (C-FIFO not full and a next control word is needed). 0 (B_0x0): no action 1 (B_0x1): setting this bit initiates a frame transfer by causing the hardware to assert the flag I3C_EVR.CFNFF (C-FIFO not full and a control word is needed) |