En el previo artículo de I3C hemos mostrado la configuración usada para esta serie introductoria de I3C usando la Raspberry Pico 2y el Sparkfun Logic Analyzer para ilustrar las transaciones de I3C con el decoficador sigrok I3C instalado.
El segundo comando I3C usado en esta serie fue el siguiente,
digikey_coffee_cup #> i3c_rstdaa
OK(0)
El Sparkfun Logic Analyzer capturó el comando I3C RSTDAA (Esto remueve cualquier dirección anteriormente asignada si fuese el caso),
En esta captura podemos ver la transición de open drain a modo push pull en la linea I3C. Esos pulsos de pequeño ancho en la linea SCL son bien angostos utilizados en el standard como una forma de aislar los artefactos I2C de los que tienen I3C ya que tienen un filtro interno para ese propósito. También la dirección de broadcast 0x7E emitida fue capturada en la linea. El próximo comando usado en es el de rastrear las direcciones de artefactos I2C para identificar los artefactos en la linea,
digikey_coffee_cup #>i2c_scan
OK(0),0x48
Esto realiza un rastreo clásico I2C de las direcciones en la linea.
El sensor de temperatura NXP P3T1755DP/Q900Z tiene una dirección I2C de 0x48. Eso se puede observar en una magnificación de la captura como se muestra a continuación,
Ahora se envia el siguiente comando para rastear artefactos en la linea I3C para identificar sus dirreciones si aplica el caso,
digikey_coffee_cup #>i3c_scan
OK(0),0x00,0x48,0x7e
En la captura previa, se puede identificar la dirección de esclavo de I2C previamente identificado como 0x48. En este punto se procede a enviar lo siguiente comando I3C_ENTDAA,
digikey_coffee_cup #> i3c_entdaa 0x21
OK(0),0x02,0x36,0x15,0x2a,0x00,0x90,0x03,0x63
Este comando entra en el proceso de inicialización de la asignación dinámica de la linea I3C como 0x21. El esclavo I3C no participa si el mismo ya tiene una dirección asignada previamente. Ahora que hemos asignado la dirección I3C a el esclavo, podemos verificar que hayan sido asignado apropiadamente usando el siguiente comando
digikey_coffee_cup #> i3c_scan
OK(0),0x21,0x7e
Ahora la Raspberry Pico 2 via el terminal minicom confirma la asignación dinámica I3C como 0x21. (0x7E es la dirección broadcast)
En este punto podemos leer el sensor de temperatura NXP P3T1755DP/Q900Z el cual tiene un ID provicional I3C (Provisional-ID) que consiste de 6-bytes (read-only) (48 bits) word con la siguiente información:
• 15 bits con el nombre del manufacturero name, unico por manufacturero (por ejemplo, NXP)
• 1 bit indicando si el artefacto tiene un ID aleatorio o uno estructurado de forma provicional (Provisional-ID)
• 16 bits con la identificación del artefactor, asignado por el manufacturero
• 4 bits que proveen la información del artefacto como instancia (por ejemplo, la dirección del puerto binario de entrada)
• 12 bits con la revision del artefacto, asignado por el manufacturero en este caso NXP
La composición exacta del ID provicional (Mipi-I3C Provisional-ID) esta mostrada en la Tabla 5 yTabla 6 con detallado contenido en la oja de especifcaciones del NXP P3T1755DP/Q900Z temperature sensor.
Para leer este ID provisional I3C se realiza una lectura directa (SDR CCC Direct Read) a la dirección 0x8D (Bus characterization register (BCR) address en la Tabla 9)
y se leen esos 6 bytes de la dirección BCR 0x8D del esclavo I3C con dirección 0x21 como sigue,
digikey_coffee_cup #> i3c_sdr_ccc_direct_read 0x21 0x8d 6
OK(0),0x02,0x36,0x15,0x2a,0x00,0x90
Estos 6 bytes 0x02,0x36,0x15,0x2a,0x00,0x90 de data recibida del interfaz I3C, son exactamente del artefacto I3C el cual tiene un ID provisional (48 bits) espeficados en tablas anteriores en la documentación del NXP P3T1755DP/Q900Z temperature sensor, y de esta manera confirmando la transacción I3C completa entre la Raspberry Pico 2 via I3C.
En el próximo artículo vamos a mostrar como leer la temperatura via I3C del NXP P3T1755DP/Q900Z temperature sensor.
Que tenga un buen dia.





