HarmonyOS设备开发:Hi3861开发板移植RC522刷卡模块

Gitee仓库地址:
https://gitee.com/rao-jiechang/HarmonyOS_ScanCard

一、初始化

RC522的初始化包括:GPIO的初始化、SPI的初始化

void RC522_GPIO_Init(void)
{
    // GPIO 初始化
    GpioInit();

    IoSetFunc(WIFI_IOT_IO_NAME_GPIO_6, WIFI_IOT_IO_FUNC_GPIO_6_SPI0_CK); //RC522_SCK
    IOSetDriverStrength(WIFI_IOT_IO_NAME_GPIO_6, WIFI_IOT_IO_DRIVER_STRENGTH_2);

    IoSetFunc(WIFI_IOT_IO_NAME_GPIO_7, WIFI_IOT_IO_FUNC_GPIO_7_SPI0_RXD); //RC522_MISO

    IoSetFunc(WIFI_IOT_IO_NAME_GPIO_8, WIFI_IOT_IO_FUNC_GPIO_8_SPI0_TXD); //RC522_MOSI
    IOSetDriverStrength(WIFI_IOT_IO_NAME_GPIO_8, WIFI_IOT_IO_DRIVER_STRENGTH_0);

    IoSetFunc(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_IO_FUNC_GPIO_9_GPIO); //RC522_NSS
    GpioSetDir(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_GPIO_DIR_OUT);

    IoSetFunc(WIFI_IOT_IO_NAME_GPIO_10, WIFI_IOT_IO_FUNC_GPIO_10_GPIO); //RC522_RST
    GpioSetDir(WIFI_IOT_IO_NAME_GPIO_10, WIFI_IOT_GPIO_DIR_OUT);

    //SPI 初始化
    WifiIotSpiCfgInitParam init_param; //主从模式:主
    init_param.isSlave = HI_FALSE;
    WifiIotSpiCfgBasicInfo spi_cfg_basic_info; //spi cfg 参数设置
    spi_cfg_basic_info.cpol = WIFI_IOT_SPI_CFG_CLOCK_CPOL_0; /* 极性 */
    spi_cfg_basic_info.cpha = WIFI_IOT_SPI_CFG_CLOCK_CPHA_0; /* 相位 */
    /* Motorola protocol(成功) */  /* Texas Instruments protocol(失败) */  /* Microwire protocol(失败) */
    spi_cfg_basic_info.framMode = WIFI_IOT_SPI_CFG_FRAM_MODE_MOTOROLA; /* 帧协议 */
    spi_cfg_basic_info.dataWidth = WIFI_IOT_SPI_CFG_DATA_WIDTH_E_8BIT; /* 数据位宽 */
    spi_cfg_basic_info.endian = WIFI_IOT_SPI_CFG_ENDIAN_LITTLE; /* 小端 */
    spi_cfg_basic_info.freq = 1000000; /* 频率 */ //1M
    SpiInit(WIFI_IOT_SPI_ID_0, init_param, &spi_cfg_basic_info);

    SPI0_ReadWriteByte(0xFF); //启动传输
}

void RC522_HW_Config(void)
{
    PcdReset();
	PcdAntennaOff();
    usleep(5000);
	PcdAntennaOn();
}

void RC522_Init(void)
{
    RC522_GPIO_Init();

    RC522_HW_Config();
}

这里需要注意的是其中的通信协议类型framMode一定要选WIFI_IOT_SPI_CFG_FRAM_MODE_MOTOROLA,否则选另外的两个是不行的。
如下图所示:
通信协议类型

二、测试

编写测试代码

unsigned char status;
unsigned char g_ucTempbuf[20];
unsigned char UID[5];

void RC522_Dispose(void)
{
    unsigned char i;

	status = PcdRequest(PICC_REQALL, g_ucTempbuf);//寻卡
	if (status != MI_OK)
	{
		return;
	}

    printf("PcdRequest success\r\n");

	status = PcdAnticoll(UID);//防冲撞
	if (status != MI_OK)
	{
		return;
	}

    printf("PcdAnticoll success\r\n");

    printf("RC522-ID:");
    for(i=0;i<4;i++)
        printf("[%2X]",UID[i]);
    printf("\r\n");
}

测试结果如下图所示:
测试结果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值