找回密码
 立即注册
查看: 177|回复: 8

STC8C2K64S2,SPI, RC522

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:14
  • 最近打卡:2026-06-27 07:21:07

5

主题

12

回帖

67

积分

注册会员

积分
67
发表于 2026-5-22 19:54:45 来自手机 | 显示全部楼层 |阅读模式
最近开发一款IC刷卡门禁机,采用rc522/si522。只能使用软件spi,调试通过。硬件spi调试不成功,用的第一组spi接口。更换STC8H8K64U也是不行。都是硬件spi调不通。担心软件spi没有硬件spi稳定
mmexport1778999745868.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:804
  • 最近打卡:2026-07-22 00:57:34
已绑定手机

51

主题

2780

回帖

2885

积分

荣誉版主

积分
2885
发表于 2026-5-23 09:55:43 | 显示全部楼层
硬件spi有四种时序,有可能是时序没对应,看看芯片手册和代码中的配置,核对一下是不是这个问题。
~~~
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:316
  • 最近打卡:2026-07-22 06:56:11
已绑定手机

70

主题

874

回帖

3225

积分

论坛元老

DIY玩家

积分
3225
发表于 2026-5-23 10:24:11 | 显示全部楼层
也许STC8单片机SPI速率较快
刷卡IC芯片rc522/si522支持的SPI速率较慢
可以尝试降低它们之间SPI的收发速率以稳定通信
永怀这学徒心
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:14
  • 最近打卡:2026-06-27 07:21:07

5

主题

12

回帖

67

积分

注册会员

积分
67
发表于 2026-5-23 19:02:49 来自手机 | 显示全部楼层
晓飛飛 发表于 2026-5-23 09:55
硬件spi有四种时序,有可能是时序没对应,看看芯片手册和代码中的配置,核对一下是不是这个问题。 ...

感谢。下周我试一下。应该不难。但是搞了好久。
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2026-07-15 11:08:53
已绑定手机

0

主题

3

回帖

12

积分

新手上路

积分
12
发表于 2026-7-10 16:59:29 | 显示全部楼层
STC8H1K08 单片机,硬件SPI 也是调不通。同样的RC522 NFC模块,用ESP32、arduino 硬件SPI 都可以。
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2026-07-15 11:08:53
已绑定手机

0

主题

3

回帖

12

积分

新手上路

积分
12
发表于 2026-7-11 20:32:22 | 显示全部楼层
谁调通了,不管硬件SPI 还是 软件SPI  , 能不能分享一下 代码,感谢
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:467
  • 最近打卡:2026-07-21 09:31:46

851

主题

1万

回帖

2万

积分

管理员

积分
24394
发表于 2026-7-11 21:21:55 | 显示全部楼层
截图202607112121529568.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:467
  • 最近打卡:2026-07-21 09:31:46

851

主题

1万

回帖

2万

积分

管理员

积分
24394
发表于 2026-7-11 21:22:15 | 显示全部楼层

AI: 您好!我是 STC AI 技术助手,已加载 STC全系列MCU专业技术手册。我可以帮您:- 回答STC技术手册中的技术问题- 自动生成您需要的通用程序- 自动高效排查您程序中的错误- 搜索论坛(www.STCAIMCU.com)历史讨论- 点此可跳转 Web-ISP 在线下载工具- 您喜爱的Agent工具也可接入 STC数据手册MCP服务器请问您有什么STC技术问题需要帮助 ?

我: https://www.stcaimcu.com/thread-23982-1-1.html

AI: 您好,我是 STC 单片机 FAE 工程师。您分享的这篇论坛帖子(TID: 23982)讨论的是 STC8C2K64S2 / STC8H8K64U 使用硬件 SPI 驱动 RC522/Si522 刷卡模块调不通 的问题。

从帖子内容来看,这是一个比较典型的 STC 硬件 SPI 与 RC522 模块通信时序/速率不匹配 的问题。下面我结合 STC 手册和论坛经验,为您做详细分析:


问题分析

1. 核心原因:SPI 时序模式(CPOL/CPHA)不匹配

RC522/Si522 的 SPI 接口通常工作在 **模式 0(CPOL=0, CPHA=0)** 或 **模式 3(CPOL=1, CPHA=1)**,具体取决于模块设计。而 STC 的硬件 SPI 有 4 种时序模式可选,需要通过寄存器 **SPCTL** 的 **CPOL** 和 **CPHA** 位来配置。

据论坛用户反馈,很多情况下硬件 SPI 调不通是因为时序模式没对上,建议仔细核对 RC522 数据手册中要求的 SPI 时序,然后对照 STC 手册配置 SPCTL 寄存器。

2. 速率过高

STC 单片机内部 IRC 时钟可达 24MHz~40MHz+,SPI 时钟分频后仍可能远高于 RC522 支持的速率(RC522 典型 SPI 时钟最高约 10MHz,有些模块甚至只支持 5MHz 以下)。据论坛用户反馈,可以尝试降低 SPI 时钟速率,例如将 SPI 时钟分频系数设大(如 SPI 时钟 = 主频/4、/8、/16 甚至更低)。

3. 引脚功能切换未正确配置

STC8 系列很多引脚具有多种功能复用,使用硬件 SPI 前必须通过 P_SW1P_SW2 寄存器将 SPI 功能切换到正确的引脚组,并确保对应的 I/O 口模式设置为 推挽输出双向口


解决方案建议

步骤 1:确认 RC522 的 SPI 时序要求

查阅 RC522 数据手册,确认其要求的 SPI 模式(通常是 Mode 0:CPOL=0, CPHA=0)。

步骤 2:正确配置 STC 硬件 SPI 寄存器

以 STC8H 系列为例,SPI 控制寄存器 SPCTL(地址 0xCE)配置如下:

符号 功能
SPCTL[7] SSIG SS 忽略位,建议置 1(由软件控制 SS)
SPCTL[6] SPEN SPI 使能,置 1
SPCTL[5] DORD 数据顺序,0=MSB 先传
SPCTL[4] MSTR 主从选择,1=主机模式
SPCTL[3] CPOL 时钟极性,与 RC522 匹配
SPCTL[2] CPHA 时钟相位,与 RC522 匹配
SPCTL[1:0] SPR1, SPR0 时钟分频,00=fosc/4, 01=fosc/16, 10=fosc/64, 11=fosc/128

步骤 3:降低 SPI 速率

建议先将分频系数设为最大(SPR1=1, SPR0=1,即 fosc/128),确认通信正常后再逐步提高。

步骤 4:检查引脚配置

以 STC8H8K64U 为例,第一组 SPI 默认引脚为:

  • SCLK → P1.7
  • MISO → P1.6
  • MOSI → P1.5
  • SS → P1.4(若 SSIG=1 则此引脚可作普通 GPIO)

需要将对应引脚设置为 推挽输出(SCLK、MOSI、SS)和 高阻输入(MISO)。


参考代码框架(STC8H 系列,Keil C51)

/*********************************************
 * STC8H8K64U 硬件SPI驱动RC522示例框架
 * 使用第一组SPI,SPI模式0 (CPOL=0, CPHA=0)
 * 时钟分频 = fosc/128
 *********************************************/
#include "STC8H.h"

// RC522 片选引脚定义(以P1.4为例)
#define RC522_CS      P14
#define RC522_CS_SET()   RC522_CS = 1
#define RC522_CS_CLR()   RC522_CS = 0

// SPI初始化
void SPI_Init(void)
{
    // 将P1.5(MOSI)、P1.7(SCLK)设置为推挽输出
    P1M1 &= ~0xA0;  // P1.5, P1.7
    P1M0 |= 0xA0;
  
    // 将P1.6(MISO)设置为高阻输入
    P1M1 |= 0x40;
    P1M0 &= ~0x40;
  
    // 将P1.4(CS)设置为推挽输出
    P1M1 &= ~0x10;
    P1M0 |= 0x10;
  
    // 配置SPCTL寄存器
    // SSIG=1, SPEN=1, DORD=0, MSTR=1, CPOL=0, CPHA=0, SPR1=1, SPR0=1
    SPCTL = 0xD3;   // 0xD3 = 1101 0011
}

// SPI收发一字节
unsigned char SPI_SwapByte(unsigned char dat)
{
    SPDAT = dat;            // 启动发送
    while(!(SPSTAT & 0x80)); // 等待SPIF置位
    SPSTAT = 0xC0;          // 清除SPIF和WCOL标志
    return SPDAT;
}

// RC522 写一字节
void RC522_WriteByte(unsigned char addr, unsigned char dat)
{
    RC522_CS_CLR();
    SPI_SwapByte((addr << 1) & 0xFE);  // 写命令,地址左移1位,最低位=0
    SPI_SwapByte(dat);
    RC522_CS_SET();
}

// RC522 读一字节
unsigned char RC522_ReadByte(unsigned char addr)
{
    unsigned char val;
    RC522_CS_CLR();
    SPI_SwapByte(((addr << 1) & 0xFE) | 0x01);  // 读命令,地址左移1位,最低位=1
    val = SPI_SwapByte(0x00);
    RC522_CS_SET();
    return val;
}

void main(void)
{
    unsigned char id;
  
    P_SW2 |= 0x80;  // 使能访问XFR(如需要)
    SPI_Init();
  
    // 读取RC522版本号验证通信
    id = RC522_ReadByte(0x37);  // 版本寄存器地址
    // id 应为 0x92 或 0x12 等,视芯片版本而定
  
    while(1)
    {
        // 主循环
    }
}

排查建议

  1. 先用逻辑分析仪或示波器抓波形,观察 SCLK、MOSI、MISO、CS 的时序,确认 CPOL/CPHA 是否正确、速率是否合适。
  2. 先降低速率到最低(fosc/128),排除速率问题。
  3. 检查 RC522 模块的供电,确保 3.3V 供电稳定,且 STC 的 I/O 口电平与 RC522 兼容(建议加电平匹配或使用开漏+上拉)。
  4. 如果硬件 SPI 实在调不通,软件 SPI 只要时序正确、速率合适,稳定性也是有保障的,不必过度担心。

如果您能提供更具体的信息(如使用的 STC 具体型号、主频频率、当前 SPCTL 配置值、是否抓过波形等),我可以进一步帮您定位问题。


🔍 搜索 "https://www.stcaimcu.com/thread-23982-1-1.html"

⏱️ 查找用时 3.2s | 总回答用时 22.4s

回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2026-07-15 11:08:53
已绑定手机

0

主题

3

回帖

12

积分

新手上路

积分
12
发表于 7 天前 | 显示全部楼层
AI8H1K08单片机,硬件SPI RC522 成功了。下边是AI总结的关键:

是的,当前是硬件 SPI:SPCTL=0x53(SPEN|MSTR|/32,SSIG=0,Mode0),片选仍用 P5.4。
UID: 99 87 D5 E7 说明硬 SPI 读写卡已通。

成功关键(浓缩)
硬件前提
CS→P5.4、RST→P3.4,MOSI/MISO/SCK 在 P1.3/1.4/1.5;电源稳定后再 init(delay 墙钟约 10s)。

Ai8 硬 SPI 主机拓扑

Mode0:CPOL=0, CPHA=0
SSIG=0,P1.2(硬件 SS) 恒高(拉低会变从机、死等 SPIF)
RC522 片选只用 P5.4
先读 SPDAT,再清 SPIF
协议轮询(不是 IRQ 脚)
等 RxIRq 或 TimerIRq,不要把单独的 Idle(0x14) 当成收包完成。

读数防假
丢掉明显假值(如把 REQA 0x26、地址 0x94 当成 ComIrq/FIFO),必要时多拍一拍。

天线
TxControl=0x83 保持射频开启。

软 SPI 之前能成功,是因为位模拟绕开了 SPCTL/SS/SPIF;硬 SPI 要对齐上述主机规则,协议层才能和软 SPI 一样稳定出 UID。
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-7-22 09:23 , Processed in 0.080457 second(s), 90 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表