This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] LAUNCHXL-CC3235SF:作为与 PN532 RFID 的主 CC3235SF I2C 连接

Guru**** 2540720 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1055097/launchxl-cc3235sf-as-a-master-cc3235sf-i2c-connection-with-pn532-rfid

器件型号:LAUNCHXL-CC3235SF
主题中讨论的其他器件:CC3235SF

尊敬的 TI:

我想通过与 CC3232sf (主器件)的 i2c 通信建立 PN532 RFID (从器件)的固件版本、但我尝试过很多次、但失败了、因此请检查代码并解决此问题。

uint32_t getFirmwareVersion (void)

uint32_t 响应;

pn532_packetbuffer[0]= PN532_COMMAND_GETIRMWAREVSION;

if (!sendCommandCheckAck (pn532_packetbuffer、1、1000))

返回0;

//读取数据包
ReadData (pn532_packetbuffer、12);

//检查一些基本的东西
如果(0!= memcmp ((char*) pn532_packetbuffer、
(char*) pn532RESPONSE_firmwarevers、6))

返回0;

int offset = 6;
响应= pn532_packetbuffer[offset++;
响应<<= 8;
响应|= pn532_packetbuffer[offset++];
响应<<= 8;
响应|= pn532_packetbuffer[offset++];
响应<<= 8;
响应|= pn532_packetbuffer[offset++];

退货响应;

bool sendCommandCheckAck (uint8_t *cmd、uint8_t cmdlen、uint16_t 超时)

//编写命令
writecommand(cmd, cmdlen);
//等待芯片准备就绪!
如果(!waitready (timeout))

返回 false;

//读取确认
如果(!readack())

#ifdef PN532DEBUG
printf ("未接收到 ACK 帧!\n\n"\});
#endif
返回 false;

//对于 SPI,只等待芯片再次就绪。
// I2C 不需要这样做。
如果(!waitready (timeout))

返回 false;

返回 true;// ack'd 命令

/ /
/*!
n ü@brief 会将命令写入 PN532、并自动插入
前导码和所需的帧详细信息(校验和、len 等)
@param cmd 指向命令缓冲区的指针
@param cmdlen 命令长度(以字节为单位)
*
/ /
void writecommand (uint8_t *命令、uint8_t 命令)

// I2C 命令写入。
uint8_t 校验和;
uint8_t txBuffer[9];
uint8_t rxBuffer[0];
cmdlen++;

usleep(2000);

#ifdef PN532DEBUG
display_printf (display、0、0、"\n 正在结束:");
#endif
// I2C 启动
i2cTransaction.slaveAddress = PN532_I2C_ADDRESS;
校验和= PN532_PREAMBLE + PN532_PREAMBLE + PN532_STARTCODE2;

txBuffer[0]= PN532_PREAMBLE;// 0x00

txBuffer[1]= PN532_PREAMBLE;// 0x00

txBuffer[2]= PN532_STARTCODE2;// 0xFF

txBuffer[3]= cmdlen;

txBuffer[4]=~cmdlen + 1;

txBuffer[5]= PN532_HOSTTOPN532;// 0xD4

校验和+= PN532_HOSTTOPN532;
uint8_t i = 0;
对于(i = 0;i < cmdlen - 1;i++)

txBuffer[6]=(cmd[i]);

// i2cTransaction.writeBuf =&cmd[i];
// i2cTransaction.readBuf = rxBuffer;
// i2cTransaction.writeCount = strlen ((const char*) txBuffer);
// i2cTransaction.ReadCount = 0;
// I2C_transfer (i2c、&i2cTransaction);

校验和+= cmd[i];
#ifdef PN532DEBUG
Display_printf (display、0、0、"0x");
display_printf (display、0、0、"%x"、(byte) cmd[i]);
#endif

txBuffer[7]=~校验和;

// i2cTransaction.writeBuf =&txBuffer[7];
// i2cTransaction.readBuf = rxBuffer;
// i2cTransaction.writeCount = strlen ((const char*) txBuffer);
// i2cTransaction.ReadCount = 0;
// I2C_transfer (i2c、&i2cTransaction);

txBuffer[8]= PN532_POSTACMBLE;

i2cTransaction.writeBuf = txBuffer;
i2cTransaction.readBuf = rxBuffer;
i2cTransaction.writeCount = 9;
i2cTransaction.ReadCount = 0;

I2C_transfer (i2c、&i2cTransaction);

// I2C 停止
I2C_Close (i2c);

/ /
/*!
@如果 PN532已准备好响应、则短暂返回 true。
*
/ /

bool isready()

uint8_t x;
x = GPIO_READ (IRQ_PIN);
如果(x=0)

返回1;
}否则{
返回0;


/*!
@短暂等待 PN532就绪。
@放弃前超时超时
*
/ /
bool waitready (uint16_t 超时)

uint16_t 定时器= 0;
while (!isready())

如果(超时!= 0)

计时器+= 10;
如果(定时器>超时)

display_printf (display、0、0、"waitready timeout!\n\r\n);
返回 false;


返回 true;

/*!
μ@简要尝试读取 SPI 或 I2C ACK 信号
*
/ /
bool readack()

uint8_t ackbuy[6];

ReadData (ackbuff、6);

return (0 =memcmp ((char*) ackbuff、(char*) pn532ack、6));

/ /
/*!
@简要通过 I2C 从 PN532读取 n 个字节的数据。
@param buff 指针指向将要写入数据的缓冲区
@param n 要读取的字节数
*
/ /


空 ReadData (uint8_t *缓冲区、uint8_t n)

i2cTransaction.slaveAddress = PN532_I2C_ADDRESS;
i2cTransaction.writeBuf =NULL;
i2cTransaction.readBuf =缓冲;
i2cTransaction.writeCount = 0;
i2cTransaction.ReadCount = n+2;

I2C_transfer (i2c、&i2cTransaction);

uint8_t i = 0;
对于(i = 0;i < n-1;i++)

buff [i]= buff [i+1];

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们不 负责专门与此 PN532 RFID 器件进行通信。 您必须自己找到的调试功能。 如果器件或 TI 提供的软件有任何特殊问题、我们将乐意提供帮助。  

    我注意到、PN532有大量的开源软件。 例如、您可以参阅此 Adafruit 指南、然后您可以移植 CC32xx 的软件: https://learn.adafruit.com/adafruit-pn532-rfid-nfc 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您能否通过 PN532 RFID 发送 ccc3235sf 的 i2c 连接图?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    同样、PN532不是 TI 提供的芯片。 上面提供的链接中似乎有一个接线指南。 您只需将 SPI 和 I2C 引脚从 Arduino 重新分配到 CC3235 Launchpad。