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)