[原创] 破解了CMT2119A的寄存器设置
CMT2119A是一款国产的SubG无线发射IC, 频率范围是240~960MHz, 支持FSK/GFSK/OOK调制方式, 输出功率从-10dBm到+13dBm可调, 封装是小巧的SOT23-6, 是不是很不错? 于是买两个回来, 搭个可变频率信号源试试. 反正这类东西玩法都差不多, 查一下寄存器设置, 把需要的频率和功率写进去就行.然后才发现问题: datasheet里居然没有寄存器设置, 只给了示例代码, 示例代码里的寄存器具体取值从哪来? 得下载个他的RFPDK软件, 填上需要的频率功率之类, 他给生成寄存器值. 这么一来, 想自己自由设置频率就不行了. 鸡贼成这样还真是稀罕, 骂一句CNDY的. 找到一个CMT2119B的寄存器说明, 然而一试, 根本对不上号, 看来这俩型号完全不是一回事, 仅供参考吧.
没办法, 只能自己破解了. 既然频率范围是240~960MHz, 那就250/350/450, 每100MHz一个点, 各生成一组寄存器值试试, 粘贴到excel里, 是这样的:
密密麻麻, 看晕了有没有? 再仔细看看, 其实大部分寄存器的值是保持不变的, 这些寄存器咱们就不关心了, 可以去掉. 不过也有可能后面零头有影响, 所以找几个随机值添上, 再试试, 果然和频率相关的就那几个, 标记一下, 是这样的:
其中变化最大的是寄存器7, 这个一定是频率的低位数了. 怎么得到它和频率的具体关系呢? 再添加几个和现有频率非常接近的值试试, 250.01, 350.01, 550.01, 试试. 和之前猜测的一样, 频率变化很小时, 只有寄存器7的值不一样. 那么我们试着找一下它们的关系.
先看250.000和250.010这一组, 频率变化0.01MHz, 寄存器7的变化量是0xb1d2-0xb13b=151, 也就是说, 寄存器7每变化1个单位, 频率会变化66Hz左右. 这个数是怎么来的? 这时参考一下CMT2119B那个说明, 原来是外部26M晶振的频率先若干倍频, 再小数分频, 而寄存器7就是这里第二步分频系数的小数部分的低位数.
下一步, 小数部分总共20位二进制, 也就是说这里小数部分的分母是2^20=1048576, 0.01MHz/26MHz*1048576=403, 再用403/151=2.6688, 大约是8/3, 是个简单分数, 看来有戏了.
再把250MHz除以8/3, 得到93.75. 93.75/26=3.605769, 小数部分乘以1048576得到635194, 转换成16进制, 是0x9B13A. 和上面的寄存7的内容对比一下,破案了吧? 把公式复制粘贴一下, 看放到别的格子对不对.
和预想的差不多, 低频段的几个都对上了, 从350MHz开始不对了, 大概是因为不同频段的分频系数不同. 在350MHz旁边添加350.01MHz的寄存器参数, 再用上面的老办法, 解决了.
最底下的是算出来的寄存器值, 可见低16位就是寄存器7的内容, 高4位是寄存器8的次高4位, 而寄存器8的最高4位则是之前算出来的分频系数的整数部分, 到此寄存器7和8彻底解决了.
再看寄存器1和6, 很明显, 寄存器1在较低频率时是0x5400, 较高频率时是 0x5000, 分界线是450MHz和550MHz之间的某个频率. 用二分法很容易就能找到, 是480MHz.
寄存器6的情况类似, 中间这个分界线也是480MHz, 两边两个呢, 再用二分法, 左边试出来是320MHz, 右边自然会想到是640MHz, 一试, 果然是.
有了1, 6, 7, 8四个寄存器, 应该够了, 寄存器13和16就先不管了, 估计是在不同频率下对输出功率做了点补偿. 按上面的规律, 编程, 串口设定频率, TinySA这边马上显示我要的频率了, 成功!
unsigned short reg1, reg6, reg7, reg8;
int mul;
if(freq > 480000000UL) {
reg1 = 0x5000;
if(freq > 640000000UL) {
reg6 = 0x0000;
mul = 2;
}
else {
reg6 = 0x0001;
mul = 3;
}
}
else {
reg1 = 0x5400;
if(freq > 320000000UL) {
reg6 = 0x0000;
mul = 4;
}
else {
reg6 = 0x0001;
mul = 6;
}
}
float div = freq * mul / 16 / 26e6;
unsigned short div_n = (int)div;
unsigned long div_k = (div - div_n) * 1048576UL;
reg7 = div_k & 0xffff;
reg8 = ((div_k >> 16) << 8) | (div_n << 12);
write_2nd_reg(1, reg1);
write_2nd_reg(6, reg6);
write_2nd_reg(7, reg7);
write_2nd_reg(8, reg8);
最后再骂一句厂家, 你算哪根葱, 糊弄你祖宗是吧?
牛,楼主能传个完整档上来吗?用过2110A都是厂家烧好了,我拿来用。要是能自己设置寄存器扫频,那就更好玩了。 GZZXB 发表于 2022-4-30 21:36
牛,楼主能传个完整档上来吗?用过2110A都是厂家烧好了,我拿来用。要是能自己设置寄存器扫频,那就更好玩 ...
(引用自2楼)
见附件, 都在里面了. 楼主牛逼,这个片子查了一下,便宜大碗啊 tomzbj 发表于 2022-4-30 21:48
见附件, 都在里面了.
(引用自3楼)
多谢楼主 tomzbj 发表于 2022-4-30 21:48
见附件, 都在里面了.
(引用自3楼)
多谢楼主,好东西 干的好,SOT23-6这么小真不错,不知这个距离能多远? cne53102 发表于 2022-4-30 22:33
干的好,SOT23-6这么小真不错,不知这个距离能多远?
(引用自7楼)
+13dBm的发射功率
如果接收端是CMT2210, 标称灵敏度-113dBm, 那就是最大允许126dB的传输衰减. 然后套公式算吧... tomzbj 发表于 2022-4-30 23:06
+13dBm的发射功率
如果接收端是CMT2210, 标称灵敏度-113dBm, 那就是最大允许126dB的传输衰减. 然后套公式 ...
(引用自8楼)
哎呀,我这跟无线电绝缘的人。。
搜了个式子,假设收发天线都是0,126dBm
使用433Mhz的话就是:
10^((126-32.44-20log(433))/20)=110.030250994km
使用915Mhz的话:
10^((126-32.44-20log(915))/20)=52.0689603066km
是这样算吗?sot23的东西怎么可能几十上百km,这也太远了吧…… 本帖最后由 Himem 于 2022-5-1 00:30 编辑
cne53102 发表于 2022-4-30 23:36
哎呀,我这跟无线电绝缘的人。。
搜了个式子,假设收发天线都是0,126dBm
(引用自9楼)
两边天线要离地200m才能110km视距?
https://www.metabunk.org/curve/ cne53102 发表于 2022-4-30 23:36
哎呀,我这跟无线电绝缘的人。。
搜了个式子,假设收发天线都是0,126dBm
(引用自9楼)
城市环境的用hata模型会准确很多
自由空间损耗公式,仅仅适合完全开阔无障碍环境。例如一边在太空,一边在地面,这种情况下确实达到理论计算值。 mark收藏。
这货用在电子纸价签里合适吗 不加pa ,两边弹簧天线可以5km吗 ,开阔地 Himem 发表于 2022-5-1 00:28
两边天线要离地200m才能110km视距?
https://www.metabunk.org/curve/
(引用自10楼)
确实呢,这也不是什么短波电台那种。。 monkeynav 发表于 2022-5-1 00:35
城市环境的用hata模型会准确很多
自由空间损耗公式,仅仅适合完全开阔无障碍环境。例如一边在太空,一边 ...
(引用自11楼)
不愧是搞卫星的,这个看起来正常多了
按大城市:
hM = 2m高
CH = (3.2*(log(11.75*2))^2)-4.97 = 1.04544666545
hB = 10m高,f = 433Mhz,当距离1.15km时
LU = 69.55+26.16*log(433)-13.82log(10)-1.04544666545+(44.9-6.55*log(10))*log(1.15) = 125.982838881dB
二者都在地面1米:
CH = (3.2*(log(11.75*1))^2)-4.97 = -1.30606068488
距离490m时:
LU = 69.55+26.16*log(433)-13.82log(1)-(-1.30606068488)+(44.9-6.55*log(1))*log(0.49) = 125.916388047dB
二者都在10m高:
CH = (3.2*(log(11.75*10))^2)-4.97 = 8.74218166141
距离1.82km时:
LU = 69.55+26.16*log(433)-13.82log(10)-8.74218166141+(44.9-6.55*log(10))*log(1.82) = 125.932079436dB
感觉对于sot23来说还是挺疯狂的,但已经在心理可以接受的范围了,13楼的5km估计是不行了
空-地看起来是挺理想的,这么说lora的arduino卫星确实可行哈 本帖最后由 monkeynav 于 2022-5-1 06:24 编辑
cne53102 发表于 2022-5-1 01:47
不愧是搞卫星的,这个看起来正常多了
(引用自15楼)
hata大城市指的是高楼大厦林立,城郊指的是小房子比人高,还有一种是开阔地(荒野)
登月用的对讲机看起来很像简易fm话筒,功率不大,电路只有几个三极管。在太空用对讲机,1w确实能通1000km。
仰角非常关键,贴近地面即使是开阔地,也不能按自由空间损耗计算。卫星一般需要5度以上仰角,测出来才接近FSPL。 很多工厂是没有太多技术开发能力的,CMT芯片可以通过软件设置,可以解决大部分需求,不需要专门的技术! monkeynav 发表于 2022-5-1 06:22
hata大城市指的是高楼大厦林立,城郊指的是小房子比人高,还有一种是开阔地(荒野)
登月用的对讲机看起 ...
(引用自16楼)
明白了,感谢~ 搭车请教一下,离地20公分的距离该怎么计算。谢谢!
CMT2119A13dB 发射距离多远?这个芯片GFSK发射抗干扰怎么样?会丢包吗?有用过的 朋友吗?分享一下 经验。 dxm123 发表于 2023-5-17 19:57
CMT2119A13dB 发射距离多远?这个芯片GFSK发射抗干扰怎么样?会丢包吗?有用过的 朋友吗?分享一下 经验 ...
(引用自20楼)
不丢包的就不叫无线通信了:)没有哪个无线通信不丢包的,
要看在什么环境下,以及灵敏度多少的时候,
页:
[1]