跳转至

rc522 - rc522 非接触式读写卡驱动

示例

--注意:因使用了sys.wait()所有api需要在协程中使用
-- 用法实例
local rc522 = require "rc522"
sys.taskInit(function()
    spi_rc522 = spi.setup(0,nil,0,0,8,10*1000*1000,spi.MSB,1,0)
    rc522.init(0,pin.PB04,pin.PB01)
    wdata = {0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
    while 1 do
        rc522.write_datablock(8,wdata)
        for i=0,63 do
            local a,b = rc522.read_datablock(i)
            if a then
                print("read",i,b:toHex())
            end
        end
        sys.wait(500)
    end
end)

rc522.set_bit_mask(address, value)

写rc522寄存器

参数

传入值类型 解释
number address 地址
number value 值

返回值

例子

write_rawrc(rc522_bit_framing,0x07)

rc522.read_rawrc(address)

读rc522寄存器

参数

传入值类型 解释
number address 地址

返回值

返回值类型 解释
number 寄存器值

例子

local n = read_rawrc(rc522_com_irq) 

rc522.set_bit_mask(address, mask)

对rc522寄存器置位

参数

传入值类型 解释
number address 地址
number mask 置位值

返回值

例子

rc522.set_bit_mask (rc522_fifo_level, 0x80)    

rc522.clear_bit_mask(address, mask)

对rc522寄存器清位

参数

传入值类型 解释
number address 地址
number mask 清位值

返回值

例子

rc522.clear_bit_mask(rc522_com_irq, 0x80 )

rc522.command(command,data)

命令通讯

参数

传入值类型 解释
number command
number data

返回值

返回值类型 解释
status data len 结果,返回数据,收到的位长度

例子

rc522.version()

rc522.anticoll(id)

防冲撞

参数

传入值类型 解释
string id 卡片序列号,4字节

返回值

返回值类型 解释
status uid 结果,uid

例子

local status,uid = rc522.anticoll(array_id)

calculate_crc(data)

crc计算

参数

传入值类型 解释
table data 数据

返回值

返回值类型 解释
table crc值

例子

local crc = calculate_crc(buff)

authstate(mode, addr,key,uid )

验证卡片密码

参数

传入值类型 解释
number mode 模式
number addr 地址
string key 密码
string uid uid

返回值

返回值类型 解释
bool 结果

例子

status = authstate(rc522_authent1b, addr,Key_B,uid )

rc522.write(addr, data)

写数据到M1卡一块

参数

传入值类型 解释
number addr 块地址(0-63)M1卡总共有16个扇区(每个扇区有:3个数据块+1个控制块),共64个块
table data 数据

返回值

返回值类型 解释
bool 结果

例子

rc522.write(addr, data)

rc522.read(addr)

写数据到M1卡一块

参数

传入值类型 解释
number addr 块地址(0-63)M1卡总共有16个扇区(每个扇区有:3个数据块+1个控制块),共64个块

返回值

返回值类型 解释
bool,string 结果,数据

例子

rc522.read(addr, data)

rc522.version()

rc522 硬件版本

参数

返回值

返回值类型 解释
number 硬件版本

例子

rc522.version()

rc522.halt()

rc522 命令卡片进入休眠状态

参数

返回值

返回值类型 解释
bool 结果

例子

rc522.halt()

rc522.reset()

rc522 复位

参数

返回值

例子

rc522.reset()

rc522.antenna_on()

开启天线

参数

返回值

例子

rc522.antenna_on()

rc522.antenna_on()

关闭天线

参数

返回值

例子

rc522.antenna_on()

rc522_config_isotype()

设置rc522工作方式为ISO14443_A

参数

返回值

例子

rc522_config_isotype()

rc522.request(req_code)

rc522 寻卡

参数

传入值类型 解释
number req_code rc522.reqidl 寻天线区内未进入休眠状态 rc522.reqall 寻天线区内全部卡

返回值

返回值类型 解释
bool tagtype 结果,卡类型

例子

status,array_id = rc522.request(rc522.reqall)

rc522.select(id)

选定卡片

参数

传入值类型 解释
number id 卡片序列号,4字节

返回值

返回值类型 解释
bool 结果

例子

status = rc522.select(id)

rc522.write_datablock(addr,data)

按照rc522操作流程写入16字节数据到块

参数

传入值类型 解释
number addr 任意块地址.M1卡总共有16个扇区(每个扇区有:3个数据块+1个控制块),共64个块
table data 指向要写入的数据,必须为16个字符

返回值

返回值类型 解释
bool 结果

例子

rc522.write_datablock(addr,data)

rc522.read_datablock(addr)

按照rc522操作流程读取块

参数

传入值类型 解释
number addr 任意块地址.M1卡总共有16个扇区(每个扇区有:3个数据块+1个控制块),共64个块

返回值

返回值类型 解释
bool string 结果 数据

例子

    for i=0,63 do
        local a,b = rc522.read_datablock(i)
        if a then
            print("read",i,b:toHex())
        end
    end

rc522.init(spi_id, cs, rst)

rc522 初始化

参数

传入值类型 解释
number spi_id spi端口号
number cs cs引脚
number rst rst引脚

返回值

返回值类型 解释
bool 初始化结果

例子

spi_rc522 = spi.setup(0,nil,0,0,8,10*1000*1000,spi.MSB,1,1)
rc522.init(0,pin.PB04,pin.PB01)