汽车钥匙秘钥接收解码

汽车钥匙秘钥接收解码

汽车钥匙秘钥接收解码

最新推荐文章于 2025-03-01 16:43:20 发布

MUKAMO

最新推荐文章于 2025-03-01 16:43:20 发布

阅读量3.8k

收藏

17

点赞数

16

CC 4.0 BY-SA版权

分类专栏:

车身控制技术

文章标签:

PKE

RKE

加密算法

汽车BCM编程

汽车钥匙

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/mukamo/article/details/71480054

本文档展示了汽车钥匙解码的过程,包括定义的常量、加密算法、解密函数和中断处理。主要使用了ROTL和ROTR位操作,以及特定的密钥和数据处理流程,以解码和验证汽车钥匙的序列号和同步码。

摘要生成于

C知道

,由 DeepSeek-R1 满血版支持,

前往体验 >

#include

"MCUinit.h"

#include

#define w

16

#define r

12

#define b

8

#define t

26

//2*r+2=12*2+2

#define c

4

//b*8/w = 16*8/32

#define ROTL(x,y) (((x)<<(y&(w-1))) | ((x)>>(w-(y&(w-1)))))

#define ROTR(x,y) (((x)>>(y&(w-1))) | ((x)<<(w-(y&(w-1)))))

const unsigned int

PW = 0xb7e1;

//0xb7e15163;

const unsigned int

QW = 0x9e37;

//0x9e3779b9;

const unsigned int

SKey_A[t]={0x1111,0x2222,0x3333,0x4444,0x5555,0x6666,0x7777,0x8888,0x1111,0x2222,0x3333,0x4444,0x5555,0x6666,0x7777,0x8888,0x1111,0x2222,0x3333,0x4444,0x5555,0x6666,0x7777,0x8888,0x1111,0x2222};

//@0x

;

//工厂密钥

unsigned int

SKey_B[t]={0x1111,0x2222,0x3333,0x4444,0x5555,0x6666,0x7777,0x8888,0x1111,0x2222,0x3333,0x4444,0x5555,0x6666,0x7777,0x8888,0x1111,0x2222,0x3333,0x4444,0x5555,0x6666,0x7777,0x8888,0x1111,0x2222};

//@0x

;

//产品密钥

#define EnableInterrupts {_asm ("RIM");}

#define DisableInterrupts {_asm ("SIM");}

void RX_SHIFT(void);

#define

R_EDGE_INT

EICR=0x08; //定义端口下降沿中断

#define

R_F_EDGE_INT

EICR=0x18; //端口bb反极性中断

#define

TB_OCINT_DISABLE

TBCR1 &= 0xBF; //:B时钟输出 比较中断禁止

#define

TB_OCINT_ENABLE

TBCR1 |= 0x40; //:B时钟输出比较中断允许

#define

TB_OVFINT_DISABLE

TBCR1 &= 0xDF; //B:时钟溢出中断禁止

#define

TB_OVFINT_ENABLE

TBCR1 |= 0x20; //:B时钟溢出中断允许

#define

ENABLE_RX_INT

PAOR |= 0x08; //:允许外部端口中断

#define

DISABLE_RX_INT

PAOR &= 0xf7; //:禁止外部A端口中断

#define

H_REPEAT

1

#define

H_LEARN

8

#define

Fail

0

#define

Okay

1

unsigned int RX_BUFFER[5], Header[3];

//unsigned int RX_FIFO[3][5];

unsigned int RX_FIFO_0[5], RX_FIFO_1[5], RX_FIFO_2[5], FEC_DATA[5];

unsigned char RX_BUF_CNT;

//,RX_STATUS;

unsigned int RX_TW1, RX_TW2, RX_TW3, RX_TW4;

unsigned int BIT_CYCLE;

unsigned char PREAMBLER_CNT, RX_BIT_CNT;

unsigned int BPS_DATA, BPS_DATA_SUM;

unsigned char RX_FLAG, RX_STEP, RX_ERR_CNT=0;

unsigned char FIFO_Cnt=0;

unsigned char gStatus;

unsigned long RX_SerialNum, ROM_SerialNum;

unsigned char Cmd_Code;

unsigned int RX_Sync_Code,LAST_RX_sync_Code,ROM_Sync_Code;

unsigned int A_Code[2], B_Code[2];

//bool

RX_PIN

@PADR:3;

// FUNCTION DECLARE

void DECRYPT(unsigned int* In,unsigned int* Out,unsigned int* S);

void FIFO_1_3_FEC(void);

unsigned char HEADER_1_3_FEC(unsigned int *idata);

unsigned char DECODE_PROC(unsigned int

相关推荐