黄金会员
主题
帖子
积分6701
阅读权限40
注册时间2011-3-11
最后登录1970-1-1
在线时间 小时
|
楼主 |
发表于 2019-9-8 22:33
|
显示全部楼层
本帖最后由 pla155 于 2019-9-8 22:47 编辑
参考了 https://www.yleee.com.cn/thread-40957-1-1.html
https://www.yleee.com.cn/thread-44610-1-1.html 以及此贴18楼图片信息,
终于可以把这个遥控器搞明白了。
得到 jcdzxh 的帮助,做了一个针对遥控器手柄的逻辑采集仪,采集ATmega48V发送给nRF2401A的数据流,分析它的初始化过程和发射数据包。
初始化数据包固定为“8E 08 1C 18 18 00 00 00 01 01 00 00 00 01 01 43 4F 6A”;每按键一次都会发送,进行初始化。估计是低功耗关掉了2401,进入了停机模式。
按下“A”键的数据包"01 00 01 51 01 00 61 01 00 01 51 01 00 61 01 00 01 51 01 00 61 "。 手柄ID = 81 = 0x061
再按下“A”发送的是“01 00 01 51 02 00 61 01 00 01 51 02 00 61 01 00 01 51 02 00 61 ”
有兴趣的,参考上面的帖子吧。引用 jcdzxh 的话 “这JB模块”。
这JB模块,使我从16年3月摆弄到今天,才刚入门。
/*****************************************************************************
STC8A8K64S4A12(LQFG44) @ 内部IRC振荡器的频率: 22.106MHz
用INT0监视原装遥控板ISP初始化程序的数据。
$NOMOD51
#include <STC8.H>
/*******************************************************************************/
NAME nRF2401A
/********* SFR,PIN定义声明 ***************************************/
nRF2401_CE BIT P1.0 // 黄色连接线
nRF2401_CS BIT P1.1 // 白色
nRF2401_DATA BIT P1.2 // 绿色
nRF2401_CLK BIT P3.2 // 蓝色
/********* 数据段定义声明 ***************************************/
?DT?nRF2401_DT SEGMENT DATA
/********* 代码段代码区定义声明 ***************************************/
?PR?START?nRF2401A SEGMENT CODE
?PR?UART1_INIT?nRF2401A SEGMENT CODE
/********* 数据段变量定义声明 ***************************************/
PUBLIC nRF2401_BUF
/********* 代码区函数声明 ***************************************/
PUBLIC START
PUBLIC UART1_INIT
/*****************************************************************************/
RSEG ?DT?nRF2401_DT
nRF2401_BUF: DS 020H
/*****************************************************************************/
CSEG AT 0000H
LJMP START
ORG 0003H // INT0
LJMP PROC_INT0
/*****************************************************************************/
RSEG ?PR?START?nRF2401A
USING 0
START: MOV SP , #0CFH // 8位指针,向上生长
CLR A
DEC A
MOV P1 , A
MOV P3 , A
//JP0: JNB nRF2401_CS , JP0 // CS=1 and CE=0 -> Config Mode
// JB nRF2401_CE , JP0
JP0: JB nRF2401_CS , JP0 // CS=0 and CE=1 -> Working Mode
JNB nRF2401_CE , JP0
CLR IT0 // 遥控器进入配置模式,打开中断
SETB EX0
SETB EA
MOV R0 , #nRF2401_BUF
CLR A
MOV R1 , A // 位计数器
MOV R2 , A // 字节计数器
JP1: NOP
NOP
NOP
// JB nRF2401_CS , JP1 // 等待CS=0 离开配置模式,关闭中断
JB nRF2401_CE , JP1 // 等待CE=0 离开配置模式,关闭中断
CLR EA
LCALL UART1_INIT
MOV R0 , #nRF2401_BUF
JP_Out_HEX:
CLR TI
MOV SBUF , @R0
JNB TI , $
INC R0
DJNZ R2 , JP_Out_HEX
JMP START
/******************************************************************************/
RSEG ?PR?UART1_INIT?nRF2401A
USING 0
UART1_INIT: // 57600bps@22.1184MHz
MOV SCON ,#050H // 8位数据,可变波特率
ORL AUXR ,#001H // 串口1选择定时器2为波特率发生器
ORL AUXR ,#004H // 定时器2时钟为Fosc,即1T
MOV T2L ,#0A0H // 设定定时初值
MOV T2H ,#0FFH // 设定定时初值
ORL AUXR ,#010H // 启动定时器2
RET
/******************************************************************************
函数名:INT0中断处理函数
/*****************************************************************************/
PROC_INT0:
JNB nRF2401_CLK , EXIT_INT0 // 不是上升沿,退出
MOV C , nRF2401_DATA
RLC A
INC R1 // 位计数器
CJNE R1 , #008H , EXIT_INT0
MOV @R0 , A
INC R0
CLR A
MOV R1 , A // 清位计数器
INC R2 // 字节计数器
EXIT_INT0:
RETI
/*****************************************************************************/
END
三行注释掉的代码是用来采集模块初始化过程数据的。
对应三行程序是采集发送数据包的数据。
固件在这里,92个字节就完成了这几年都没搞明白的事。固件就别下载了,上面的程序自己编译一下就什么都有了。
VCM-V2008-捕获Init.rar
(289 Bytes, 下载次数: 0, 售价: 20 人民币)
VCM-V2008-捕获Data.rar
(290 Bytes, 下载次数: 0, 售价: 20 人民币)
|
|