简介
本文介绍了基于RA4L1的SPI功能和指纹传感器FPC1020实现用户手指触摸检测的功能。
方法说明
-
硬件
-
开发板使用的是申请的RA4L1-SENSOR套件开发板,如图1所示


关于该开发板的详细信息(开发例程和电路原理图)请参考以下链接:[https://gitee.com/CoreMaker/RA4L1/tree/main]
-
FPC1020指纹传感器
FPC1020是一款电容式触摸指纹传感器,具有低能耗特性,专为移动设备开发和优化,该传感器采用高速SPI接口。https://www.fingerprints.com -
调试器
调试器使用的是JLINK -
软件环境
使用 Renesas 瑞萨 e2 studio + FSPv5.8.0
FSP以及e2studio下载地址:https://www.renesas.com/en/software-tool/flexible-software-package-fsp -
软件功能框图

主要实现了按键检测、手指放置检测以及串口打印的功能。 -
开发步骤
本开发在官方例程基础上进行二次开发,首先导入官方提供的 e2 studio example project, 并对project进行配置,由于当前project并未使用TrustZone特性,所以将所有的Flash和RAM区域均设置为Non-secure,所以这里需要将运行/调试设置–>设置TrustZone 安全/非安全边界选项设置为否,避免每次调试烧录代码过程中软件自动按照默认值重新修改安全/非安全边界。

双击project路径下的configuration.xml, 选中Pins,找到SPI0,设置SPI0的MISO/MOSI/SCLK 对应IO脚,如下所示。

然后选中New Stack,Connectivity–>SPI(r_spi),如下图所示

按照如下所示设置g_spi0的属性(property),


此外,在调试过程中会使用到串口打印log,故需要设置UART,参考官方提供的UART例程,




同时,通过开发板上的按键K1触发手指检测流程,因此这里也添加了按键检测功能,使能外部中断检测按键,配置过程如下所示:


代码主要实现如下所示:
void hal_entry(void)
{
/* TODO: add your own code here */
/* Open the transfer instance with initial configuration. */
err = R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg);
assert(FSP_SUCCESS == err);
unsigned char buff[]="RA E2STUDIO";
uint8_t buff_len = strlen(buff);
err = R_SCI_UART_Write(&g_uart9_ctrl, buff, buff_len);
if(FSP_SUCCESS != err) __BKPT();
while(uart_send_complete_flag == false){}
uart_send_complete_flag = false;
g_spi0.p_api->open(g_spi0.p_ctrl, g_spi0.p_cfg);
FPC1020_init();
FPC1020_reset();
R_BSP_SoftwareDelay(500, BSP_DELAY_UNITS_MILLISECONDS);
FPC1020_setup();
uint16_t id = FPC1020_hardware_id();
printf("FPC id=%04X\n",id);
fpc_flag_isr = 0;
FPC1020_interrupt(true);
/* KEY 外部中断初始化函数 */
fsp_err_t err = FSP_SUCCESS;
/* Open ICU module */
err = R_ICU_ExternalIrqOpen(&g_external_irq6_ctrl, &g_external_irq6_cfg);
err = R_ICU_ExternalIrqOpen(&g_external_irq7_ctrl, &g_external_irq7_cfg);
err = R_ICU_ExternalIrqOpen(&g_external_irq8_ctrl, &g_external_irq8_cfg);
/* 允许中断 */
err = R_ICU_ExternalIrqEnable(&g_external_irq6_ctrl);
err = R_ICU_ExternalIrqEnable(&g_external_irq7_ctrl);
err = R_ICU_ExternalIrqEnable(&g_external_irq8_ctrl);
while(1)
{
if (key1_press) {
key1_press = false;
printf("Detect finger\n");
EnterFingerprint:
FPC1020_command(FPC102X_REG_WAIT_FOR_FINGER);
while(fpc_flag_isr == 0);
fpc_flag_isr = 0;
uint8_t interrupt = FPC1020_interrupt(true);
if(interrupt == 0x81)
{
uint16_t status = FPC1020_finger_present_status();
if((status & 0x60) != 0x60)
{
R_BSP_SoftwareDelay(1000, BSP_DELAY_UNITS_MILLISECONDS);
goto EnterFingerprint;
}
printf("finger is detected\n");
}
}
R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_SECONDS);
}
#if BSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
}
测试电路



结果和结论
将代码编译并烧录到RA4L1开发板,并通过串口工具打印代码运行过程中对应的log,如下所示:

代码烧录成功后,运行过程中首先通过SPI接口读取指纹传感器FPC1020的ID,对应的值为020A,与该指纹传感器datasheet上的ID一致,说明SPI功能正常;然后按下开发板上的按键K1触发手指检测流程,当K1按下之后,串口打印“Detect finger”,将任一手指放置到指纹传感器触摸区域,当传感器检测到手指放置上去,就会打印“finger is detected”。
演示视频
演示视频
心得体会
本文介绍了基于 RA4L1 SPI接口和e2 Studio 灵活软件包(FSP)驱动指纹传感器实现手指检测的详细流程,实现按键检测、串口打印、通过SPI与指纹传感器进行交互等功能,并展示了硬件连接、代码、演示效果等,为基于瑞萨RA4L1 SPI接口驱动其他传感器与相关产品开发提供了参考。
541

被折叠的 条评论
为什么被折叠?



