串口初始化及RFID上电复位|学习笔记

简介: 快速学习串口初始化及RFID上电复位

开发者学堂课程【嵌入式之RFID开发与应用2020版串口初始化及RFID上电复位】学习笔记与课程紧密联系,让用户快速学习知识

课程地址https://developer.aliyun.com/learning/course/665/detail/11118


串口初始化及RFID上电复位

 

串口初始化

前面学习RFID基本概念、简单原理及其应用、RFID协议,了解从商店到通讯的基本流程,介绍卡片PICC以及阅读器PCD,以FM17550为例介绍阅读器,负载微电子里面寄存器多,不建议一开始将所有寄存器都了解,除非进行调优,有些功能目前尚未达到,需要自行设计。

image.png

绿色板是主要芯片

通过阅读代码的形式,了解寄存器

RFID简单初始化

不管在PC还是开发板,都需要明确设备连接到哪个串口

PC一般连接USB串口,开发板本身有ttySAC2串口,可以直接连接,使用的是第二个串口,UARTTXD2,代码中也要体现

/串口号

#if 0

#define UART_DEV  " /dev/ttyUSB0"

#else

#define UART_DEV  "/dev/ttySAC2"

#endif

串口明确后,主程序较为简单

int main(void)

程序框架结果

image.png

main.c主文件,其次是Makefile,有rfid_lib.c、rfid_lib.h RFID操作的接口,接口多是官方提供,进行一点修改,uart_init.c、uart_init.h有关串口的操作接口,在系统编程中详解讲解,s5p6818_gpio.h开发板的配置,s5p6818_gpioko开发板驱动,开发板用较为简单的方式驱动,不用开发板也可以,重点了解rfid_lib.c、rfid_lib.h

{

int len,i;char type;

unsigned char id[18] = {0};

//捕获信号

uart_rfid_init(UART_DEV);

while(1)

{

if( len = get_rfid card_id( id ,&type)){

printf( "%c类卡卡号: ",type);

for( i=e;i<len;i++)

printf( "%02x “,id[i]);puts("");

}

主程序中,第一步对串口明确设备,调用串口数据,串口专门用于RFID芯片

void uart_rfid_init(char *dev)

{

unsigned char version = 0;

signa1(SIGINT,sig_dispose);

if( access(" /sys/class/gpio/gpio30/value",F_OK))

system( "echo 30 > /sys/ class/gpio/export");

system( "echo out > /sys/class/gpio/gpio30/direction");

//外部复位RFID模块,直到成功读回正确版本号确定卡的存在do{

uart_rest(dev);//如果版本读取失败还要重置串口

do_rst();

usleep( 50*1000) ;

do_rst(1);

usleep(50*1000) ;

version = reg_get(versionReg);

#if DEBUG_ECHO

printf( "version=%x\n", version);

#endif

if(version !=0x92 version != 0x88){

usleep( 100*1000);

uart_close(uart_fd);

usleep(10*1000);

}

}whiie(version != 0x92 && version != Ox88);

}<<end uart_rfid_init>> ,

设置信号,是打断的信号,如果程序未正常结束,被强行打断,会关闭串口正常退出,如果希望芯片正常工作,开机上电后对FM17550产生大概几十毫秒的负脉冲,进入工作状态

脉冲产生的方法有两种:

一是芯片本身在系统中提供gpio操作,必须先找到引脚属于哪一个 gpio,需要在原理图中找到RST,用于上电储存,剩下四个未电源和地以及串口收发,GPIOA30对应未gpio30,从gpio0开始算起

在开发板中有很多gpio,创建gpio30

通过echo 30 > /sys/ class/gpio/export申请gpio,配置为输出状态

void do_rst(int value)

if(value == 0)

system( "echo 0.> /sys/class/gpio/gpio30/value");

else if(value == 1)

system( "echo 1> /sys/class/gpio/gpio30/value");

}

void uart_rest(char *dev)

//串口初始化

uart_fd = uart_open(&uart_fd, dev);

if(uart_fd<e)

{

echo 0向gpio发送0,echo 1变长高电平

整个过程为初始化gpio,根据要求在循环中将串口配置好,gpio低电平,延时50毫秒,射成高电平,产生负脉冲,读取17550芯片内部的编号或称为版本,将版本进行打印,如果发现版本是88或92,认为读取芯片是正常的,FM17550或522,因为代码是通用的,17550完全兼容522,522有的17550有,522没有的17550也有,是完全兼容的,17550读出88,522读出92,都是兼容的,如果不是92或88,会返回初始化判断,重新对芯片进行负脉冲,重负执行过程,直到能够操作阅读器为止,是一个不断循环的过程

成功初始化完成后,读取id,读取id分为几个过程

uart_rfid_init(UART_DEV);

while(1)

{

if( len = get_rfid_card_id( id,&type)){

printf("%c类卡卡号: " ,type) ;

for( i=;i<len;i++)

printf( "%02x ",id[i]);

puts("");

}

}

第一步寻卡,防冲突,第二步是后台id

串口初始化首先打开一个串口,端口具体是哪一个串口,port是设备文件地址,fd设备文件描述符,O_RDWR让串口支持可读可写,O_NOCTTY不要让串口成为控制终端,影响数据输入输出,O_NDELAY堵塞标志,堵塞有两种方式,不希望堵塞,得不到数据就返回,堵塞会影响后面操作

ttySAC0是一个数据终端,可以往终端写入任何东西 image.png

console与串口0、1实现TTY

打开串口后,对串口进行配置,配置严格按照芯片本身要求,波特率为9600,无奇偶校验位,无硬/软流控,数据位为8bit,1位停止位,

int uart_init(int fd)

{

if (uart_set(fd, 9600,0,8, 1,'N' ) == -1)

{

return -1;

}

Else

{

return ;

}

都是标准代码

对gpio高速电平通过echo命令实现,省去加载驱动,通过系统调用完成对驱动的操作,寄存器有4页

image.png

属于第三页的配置,VersionReg 0x37,可以从手册中找到寄存器

详细往后翻阅

image.png

显示89h,实际读出88,不同版本读出的数据不同,是正确的,只是一个标识,正确读取后,进行下一步卡的读取。

目录
打赏
0
0
0
0
116
分享
相关文章
kde
|
5天前
|
Docker镜像加速指南:手把手教你配置国内镜像源
配置国内镜像源可大幅提升 Docker 拉取速度,解决访问 Docker Hub 缓慢问题。本文详解 Linux、Docker Desktop 配置方法,并提供测速对比与常见问题解答,附最新可用镜像源列表,助力高效开发部署。
kde
3090 8
国内如何安装和使用 Claude Code镜像教程 - Windows 用户篇
国内如何安装和使用 Claude Code镜像教程 - Windows 用户篇
569 0
Dify MCP 保姆级教程来了!
大语言模型,例如 DeepSeek,如果不能联网、不能操作外部工具,只能是聊天机器人。除了聊天没什么可做的。
833 9
2025年最新版最细致Maven安装与配置指南(任何版本都可以依据本文章配置)
本文详细介绍了Maven的项目管理工具特性、安装步骤和配置方法。主要内容包括: Maven概述:解释Maven作为基于POM的构建工具,具备依赖管理、构建生命周期和仓库管理等功能。 安装步骤: 从官网下载最新版本 解压到指定目录 创建本地仓库文件夹 关键配置: 修改settings.xml文件 配置阿里云和清华大学镜像仓库以加速依赖下载 设置本地仓库路径 附加说明:包含详细的配置示例和截图指导,适用于各种操作系统环境。 本文提供了完整的Maven安装和配置
2025年最新版最细致Maven安装与配置指南(任何版本都可以依据本文章配置)
【保姆级图文详解】大模型、Spring AI编程调用大模型
【保姆级图文详解】大模型、Spring AI编程调用大模型
349 7
【保姆级图文详解】大模型、Spring AI编程调用大模型
Excel数据治理新思路:引入智能体实现自动纠错【Python+Agent】
本文介绍如何利用智能体与Python代码批量处理Excel中的脏数据,解决人工录入导致的格式混乱、逻辑错误等问题。通过构建具备数据校验、异常标记及自动修正功能的系统,将数小时的人工核查任务缩短至分钟级,大幅提升数据一致性和办公效率。
DeepSeek R1+Open WebUI实现本地知识库的搭建和局域网访问
本文介绍了使用 DeepSeek R1 和 Open WebUI 搭建本地知识库的详细步骤与注意事项,涵盖核心组件介绍、硬件与软件准备、模型部署、知识库构建及问答功能实现等内容,适用于本地文档存储、向量化与检索增强生成(RAG)场景的应用开发。
367 0
让AI时代的卓越架构触手可及,阿里云技术解决方案开放免费试用
阿里云推出基于场景的解决方案免费试用活动,新老用户均可领取100点试用点,完成部署还可再领最高100点,相当于一年可获得最高200元云资源。覆盖AI、大数据、互联网应用开发等多个领域,支持热门场景如DeepSeek部署、模型微调等,助力企业和开发者快速验证方案并上云。
305 22
让AI时代的卓越架构触手可及,阿里云技术解决方案开放免费试用
FLUX.1 Kontext 的全生态教程来啦!AIGC专区在线试玩!
Flux.1 Kontext [dev] 开源模型大家都用上了吗?小编汇总了3个使用教程,打包送上!
419 1

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问