# DFRobot_PN532 **Repository Path**: dfrobot/DFRobot_PN532 ## Basic Information - **Project Name**: DFRobot_PN532 - **Description**: No description available - **Primary Language**: C++ - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-06-02 - **Last Updated**: 2024-12-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DFRobot_PN532 - [English Version](./README.md) PN532是一个高度集成的传输模块,用于13.56 MHz的非接触式通信,包括基于80C51核心
的微控制器功能,40kbytes ROM和1kbytes RAM。
PN532结合了调制和解调的概念,完全集成了不同种类的非接触式通信方法和协议,在13.56
MHz与易于使用的固件,为不同的支持模式和所需的主控制器接口。
![Product Image](./resources/images/DFR0231-H.png) ## 产品链接 (https://www.dfrobot.com.cn/goods-2029.html) SKU: DFR0231-H ## 目录 * [概述](#概述) * [库安装](#库安装) * [方法](#方法) * [兼容性](#兼容性) * [历史](#历史) * [创作者](#创作者) ## 概述 这个例子是关于pn532芯片读写卡的。 ## 库安装 使用此库前,请首先下载库文件,将其粘贴到\Arduino\libraries目录中,然后打开examples文件 夹并在该文件夹中运行演示。 ## 方法 ```C++ /*! * @fn readData * @brief 读取nfc卡中一个block的所有数据(每一个block中有 16 byte 的数据) * @param buffer 缓存已经读到数据的 * @param block 要读取block的编号. * @return 状态码. * @retval 1 成功读取数据 * @retval -1 读取数据失败 */ uint8_t readData(uint8_t *buffer,uint8_t block); /*! * @fn readData * @brief 读取nfc卡片中某一个block中的某一个数据(每一个block中有 16 byte 的数据) * @param block 要读取的block的编号 * @param offset 要读取数据在block中的偏移. * @return 从nfc卡片中读到的一个数据. */ uint8_t readData(int block, uint8_t offset); /*! * @fn writeData * @brief 写一个数据道到nfc卡片中. * @param block 需要写入数据的block. * @param num 需要写入数据在block中的偏移. * @param data 要写入的数据. */ void writeData (int block, uint8_t num ,uint8_t data); /*! * @fn scan * @brief 扫描是否有nfc卡片. * @return 布尔类型, 扫描的结果 * @retval true 发现一个nfc卡片. * @retval false 未发现卡片 */ bool scan(void); /*! * @fn scan * @brief Scan 扫描是否存在一个特定id的nfc卡片 * @param nfcuid UID. * @return 布尔类型, 扫描的结果 * @retval true 存在一个特定UID的卡片 * @retval false 不存在一个特定UID的卡片 */ bool scan(String nfcuid); /*! * @fn readUid * @brief 获取卡片的UID . * @return UID . */ String readUid(); /*! * @fn writeData * @brief 写一个block的数据到nfc卡片中(每一个block中有 16 byte 的数据). * @param block 要写入block的编号. * @param data 要写入的数据. */ bool writeData(int block, uint8_t data[]); /*! * @fn readUltralight * @brief 读取一个block的数据从 Ultralight类型的nfc卡片 * @param buffer 缓存读到数据的buffer. * @param block 要读取block的编号. * @return 错误码 */ uint8_t readUltralight(uint8_t *buffer,uint8_t block); /*! * @fn writeUltralight * @brief 写一个block的数据到Ultralight类型的nfc卡片 * @param block 需要写入的block的编号. * @param data 需要写入的数据. * @return 布尔类型, 写入的结果 * @retval true 写成功 * @retval false 写失败 */ bool writeUltralight(int block, uint8_t data[]); /*! * @fn readNTAG * @brief 读取一个block的数据从NTAG类型的nfc卡片 * @param buffer 缓存读到数据的buffer. * @param block 要读取block的编号. * @return 错误码 * @retval 1 读取成功 * @retval -1 读取失败 */ uint8_t readNTAG(uint8_t *buffer,uint8_t block); /*! * @fn writeNTAG * @brief 写一个block的数据到NTAG类型的nfc卡片 * @param block 需要写入的block的编号. * @param data 需要写入的数据. * @return 布尔类型, 写入的结果 * @retval true 写成功 * @retval false 写失败 */ bool writeNTAG(int block, uint8_t data[]); /*! * @fn readData * @brief 读取NFC卡片的基本信息. * @return 保存信息的结构体. */ sCard_t getInformation(); ``` ## 兼容性 主板 | read and write | Can be accurately identified? | Remarks ------------------- | :--------------: | :----------------------------: |----- Mifareclassic S50 | √ | √ | Mifareclassic S70 | √ | √ | NTAG 213 | √ | √ | NTAG 215 | √ | √ | NTAG 216 | √ | √ | Ultralight | √ | √ | ## 兼容性 主板 | Work Well | Work Wrong | Untested | Remarks ------------------ | :----------: | :----------: | :---------: | ----- Arduino Uno | √ | | | Mega2560 | √ | | | ESP32 | √ | | | micro:bit | √ | | | ## 历史 - 2024/12/12 - Version 1.0.1 released. - 2019/10/15 - Version 1.0.0 released. ## 创作者 Written by fengli(li.feng@dfrobot.com), 2020.7.31 (Welcome to our [website](https://www.dfrobot.com/))