本帖最后由 sumoon_yao 于 2021-6-28 17:34 编辑
根据官方资料,小熊派主芯片Hi3861有2组IIC通讯接口 ,1组以E53方式引出,另一组被NFC芯片使用,参看下列原理图:
这次就来测试下小熊派的NFC功能。
例程中的B5就是NFC功能的演示,进入B5_basic_i2c_nfc目录,打开主程序i2c_example.c:
static void I2CTask(void)
{
uint8_t ret;
GpioInit();
//GPIO_0复用为I2C1_SDA
IoSetFunc(WIFI_IOT_IO_NAME_GPIO_0, WIFI_IOT_IO_FUNC_GPIO_0_I2C1_SDA);
//GPIO_1复用为I2C1_SCL
IoSetFunc(WIFI_IOT_IO_NAME_GPIO_1, WIFI_IOT_IO_FUNC_GPIO_1_I2C1_SCL);
//baudrate: 400kbps
I2cInit(WIFI_IOT_I2C_IDX_1, 400000);
I2cSetBaudrate(WIFI_IOT_I2C_IDX_1, 400000);
printf("I2C Test Start\n");
ret = storeText(NDEFFirstPos, (uint8_t *)TEXT);
if (ret != 1)
{
printf("NFC Write Data Falied :%d ", ret);
}
ret = storeUrihttp(NDEFLastPos, (uint8_t *)WEB);
if (ret != 1)
{
printf("NFC Write Data Falied :%d ", ret);
}
while (1)
{
printf("=======================================\r\n");
printf("***********I2C_NFC_example**********\r\n");
printf("=======================================\r\n");
printf("Please use the mobile phone with NFC function close to the development board!\r\n");
usleep(1000000);
}
}
程序看上去也比较简单,设置了IIC总线的2个引脚和波特率,然后向NFC存储区写入了2组数据,一组是纯文本信息,另一组是URI数据,最后程序进入循环,等待带有NFC功能的手机来读取这2组信息。
将 sample目录下的build.gn文件做如下修改:
#"B1_basic_led_blink:led_example",
#"B2_basic_button:button_example",
#"B3_basic_pwm_led:pwm_example",
#"B4_basic_adc:adc_example",
"B5_basic_i2c_nfc:i2c_example",
#"B6_basic_uart:uart_example",
也即注释掉B2,去掉B5的注释。
编译和烧写过程与上一篇一样。
打开串口终端,程序运行结果如下图所示:
循环等待带有NFC功能的手机来读取NFC数据
手机中装有2个NFC工具,一个是ST公司的NFC Tap,另一个是NXP公司的NFC Taginfo,使用这2个app分别读取。
先来看下NFC Tap的读取情况。NFC Tap有2种读取方式:Read Tag和Read NDEF。
先看下Read Tag方式:
手机靠近板子的NFC TAG区域,NFC指示灯亮,但是手机没有读取到信息。
再使用Read NDEF方式读取,手机靠近板子的NFC TAG区域后,马上响起了读取成功的提示音,且手机屏幕上显示出了读取的内容:
上图中可以看出NFC读取app已经成功读到了板子主程序运行写入的2组数据。
再看下NXP Taginfo 读取情况,点击“Sacn & Show”按钮,手机靠近板子的NFC TAG区域,很快屏幕上显示已读取到数据:
点击“NTAG I2C Plus”按钮,屏幕显示了该NFC Tag的详细信息:
如何向小熊派通过NFC写入数据,经过了解小熊派新版有个读取NFC数据的例子,参考之后对现有的NFC例程做些改动即可实现。
首先修改主程序i2c_example.c:
在nfc目录下的程序NT3H.c文件中增加函数:
在nfc目录下的头文件NT3H.h文件中增加一行:
编译、烧写后程序运行结果如下:
等待外部NFC读卡器读取的同时,板子本身也在循环读取初始写入的数据,此时如果有外部NFC Writer向板子写入数据,那么就实现了通过NFC向板子传送数据的目的。
打开手机上的NFC Writer,先测试写入文本数据:
按下WRITE按钮,将手机靠近板子的NFC区域,嘀嗒一声后写入成功,测试串口终端显示:
因为输出显示方式的问题,看不出板子读到的数据,用NFC Tap APP再来读取下,结果如下:
说明数据被成功写入到了板子的NFC数据存储区。
再用NFC Write写入URL数据:
同样的在嘀嗒一声后写入成功,测试串口终端显示:
用NFC Tap APP再来读取下,结果如下:
至此,NFC双向通讯测试完毕。当然对NFC的一些具体的技术细节,后面还要抽时间研究。