cancel
Showing results for 
Search instead for 
Did you mean: 

IT_STS_Dyn Register

StefanoSperandio_ST
Associate III

Hi,

I'm working with the NUCLEO-NFC07A1 (that mounts ST25DV64KC chip), and I'm trying to read the dynamic registers via the I2C interface. However i've some problems reading the IT_STS_Dyn register at 0x2005 addr.

This register should indicates which event triggered the GPO interrupt.

I've configured the GPO1 register to trigger interrupt for various source. When an event occurs and GPO1 interrupt is activated, I expect to see some bits in the IT_STS_Dyn register set to 1, indicating the source of the interrupt. However, when I read the IT_STS_Dyn register via I2C, I always get a value of 0x00.

 

In addition, I've noticed that I encounter the same problem (getting a value of 0x00) when reading all the dynamic RO registers. In contrast, the other dynamic registers that are not RO don't exhibit this behavior and return expected values.

I'm wondering if there are any additional configuration steps required, or if I'm making an error in the reading sequence. Has anyone experienced similar issues or have suggestions on how to resolve this?

Thank you in advance!

 

This discussion has been locked for participation. If you have a question, please start a new topic in order to ask your question
1 ACCEPTED SOLUTION

Accepted Solutions

Hello!

Thank you for your precious support...i've resolved the issue modifying the order of the i2c functions and somethings in the custom function (Register_Manager function).

Now i can read all the Dynamic RO register...

 

Best regards.

View solution in original post

4 REPLIES 4
JL. Lebon
ST Employee

Hello, 

There is no specific configuration to read dynamic registers, whether they are RO or not.
Nevertheless, the IT_STS_Dyn register is special compared to other dynamic register because it is reset to 0x00 when it is read.
This means that if you read it twice quickly (quickly meaning before a new interruption occurs), the first read will give you the interruption status with correct bits set to 1, and the second read will give you all 0.

Another reason to have all 0 in the IT_STS_dyn register may simply be that the interruption has not been triggered. Are you sure that the interrupt has occurred ? Where you able to capture it on the GPO output?

As for other RO dynamic registers that returns only 0x00:
- I2C_SSO_dyn is set to 0 by default as long as the I2C security session is not opened, so it may be normal to read it at 0x00
- MB_LEN_Dyn is set to 0x00 by default until you activate the mailbox, so it is probably also normal that you read it at 0x00.

Best regards.

Hi JL Lebon, first of all, thank you for your availability.

Let me explain in more detail what I’ve done. Essentially, I’m controlling the NFC07A1 board using a Nucleo-U575ZI-Q. I mapped (through  STM32CubeIDE) the GPO pin to the corresponding micro's pin as GPIO_EXTI6 (PA6). At this point, I’ve activated a flag when the interrupt occurs, and in the main, I handle the function related to the flag with very simple code as you can see in the following figures:

StefanoSperandio_ST_0-1725436848037.pngStefanoSperandio_ST_1-1725436862673.png

Then, I performed various tests by setting the GPO1 register to different values to verify that the interrupt is triggered correctly. For example, I tested the EEPROM writing (RF_WRITE_EN pin) using the Android app made by ST, and then I tested for the presence of the field (FIELD_CHANGE_EN).

As you can see, I’ve enabled the function Register_Manager(0x2005, 0x02, 0xA6, 0), which is a simple function I created that allows me to read the 0x2005 register via the I2C protocol (I'm sure that this function works because I used it to read and write many registers before). However, every time an interrupt is triggered, this function always returns 0x00.

 

Regarding the other dynamic RO registers, I know in which situations they should change, but for both the registers you mentioned, they continue to return 0x00 when I read them after performing the actions that should change their value:

1. For I2C_SSO_Dyn I enabled the security session using the Present_Password function (which then allows me to write to registers that require a password via I2C) and then i read it, but the I2C_SSO_Dyn register continues to return 0x00.

2. For MB_LEN_Dyn, I wrote the mailbox via I2C, but it still returns 0x00. Can the mailbox be written via I2C, or does it need to be done via RF to update the MB_LEN_Dyn register??

Thank you in advance for your help!

 



 

JL. Lebon
ST Employee

Hello, 

Can you try to read the EH_CRTL_Dyn regsiter (0x2002), just to check that the register read is performed correctly?
If you have only VCC as power supply and energy harvesting disabled, you should read 0x04. If there is also RF field present + VCC, you should read 0x06.

Best regards.

Hello!

Thank you for your precious support...i've resolved the issue modifying the order of the i2c functions and somethings in the custom function (Register_Manager function).

Now i can read all the Dynamic RO register...

 

Best regards.