我在从评估板设置 GPO 中断时遇到问题。
我的应用是使用 I2C 将一些数据写入标签,然后从阅读器读取。为了避免冲突(当没有正在进行的 RF 操作时使用 I2C 写入 EEPROM)我正在尝试设置标签以启用 RF_AC
tiVITY 中断,据我所知,应该将 GPO 引脚从 RF 命令拉低(from reader) SOF 到标签 EOF 的 RF 响应,然后返回 1。
现在,我正在使用一个代码:
1) 当前 I2C 密码,默认设置为 64 位零;
2)使用库中的函数将命令写入寄存器
3) 尝试使用其功能读取 GPO 引脚,当有 RF 命令时,该功能应返回零。我想,在这里,RF 命令甚至意味着来自阅读器的读取命令。我正在使用 X-NUCLEO-
NFC03A1 及其演示代码和库,因此我认为读者始终处于阅读模式。
这是我的代码:
- ST25DV_PASSWD password; //it is a struct MsbPasswd and LsbPasswd both with 32 bits each, total 64 bits of password
- password.MsbPasswd = 0;
- password.LsbPasswd = 0;
- Serial.print("DEBUG: I2C password (decimal value) is ");
- Serial.print(password.MsbPasswd);
- Serial.println(password.LsbPasswd);
- Serial.print("DEBUG: Size of total password is ");
- Serial.print(sizeof(password.MsbPasswd)+sizeof(password.LsbPasswd));
- Serial.println(" bytes");
- NFCTAG_StatusTypeDef NFC_tag_status = ST25DV_i2c_PresentI2CPassword(password);
- if (NFC_tag_status == 0)
- {
- Serial.println("DEBUG: Command to present I2C password sent successfully!");
- }
- else
- {
- Serial.print("DEBUG: Error while sending command to present I2C password. Error code is: ");
- Serial.println(NFC_tag_status);
- }
- // Now trying to call the function to set the GPO register correctly, to enable GPO pin trigger on RF_ACTIVITY. The correct value for pinGPOConf should be hex = 0x02
- unsigned int pinGPOConf = 0x82;
- NFC_tag_status = ST25DV_i2c_ConfigureGPO(pinGPOConf);
- if (NFC_tag_status == 0)
- {
- Serial.println("DEBUG: Command to configure GPO Pin to RF_ACTIVITY sent successfully!");
- }
- else
- {
- Serial.print("DEBUG: Error while sending command to configure GPO Pin. Error code is: ");
- Serial.println(NFC_tag_status);
- }
- void loop() {
- // Try some functions to know the status of the GPO pin, which is already initialized by the X_Nucleo_Nfc04.begin() function at the beginning
- int statusGPO = X_Nucleo_Nfc04.ST25DV_GPO_ReadPin();
- if (statusGPO == 0) Serial.println("GPO set to zero!");
- }
NFC_tag_status 始终返回零,因此显示 I2C 密码和配置 GPO 寄存器的命令都可以,事实上,对于 ST25 Android 应用程序,我可以看到使用此代码发送给它的正确值。
问题是,在循环函数中,GPO 引脚始终读取为 1,即使我将标签呈现给阅读器并从中读取也是如此。奇怪的是,我的一个朋友尝试用示波器连接到 GPO 引脚(使用 Arduino 引脚配置应该是数字 12,从那里引脚似乎总是为零!
此外,pinGPOConf,这是配置 GPO 寄存器的值,我尝试同时使用 0x02(它将 GPO 寄存器的 b1 设置为 1,其余位为零,b1 应该是指 RF_ACTIVITY 事件的那个),还有 0x82,即 b7=1 和 b1=1,其中 b7 是 GPO 寄存器的 GPO_Enable 位,根据数据表。正如所解释的,这两种配置都给出了相同的结果。
那么任何人都可以帮我找出问题所在吗?也许我误解了什么。