一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
楼主: pla155
收起左侧

[其他DIY] 玩-iamusb的“2.4G NRF2401A ATMEGA48V单片机 2.4G 无线 遥控 收发器”

[复制链接]
 楼主| 发表于 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 人民币)



本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-4-26 20:49 , Processed in 0.043387 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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