|
发表于 2023-1-20 22:15:26
|
显示全部楼层
|
1、前言
某天逛淘宝买电子垃圾的商铺,发现有智能手表买(rick and morty),评论说超值,于是入手了一个。由于没有做好功课,发过来的不是店家描述的那款。拿到手开机傻眼了,停留在配对阶段,没有app可用无法配对,进不了界面。就是下面蓝色的等待配对的界面。这可怎么办?翻看tb评论区一看,结果也有很多人中招,买过来连时间都不能看,这手表有何用!!!又不想浪费时间退货,不甘心,想折腾下,于是有了下面的过程。
2、拆开
由于是分析之后发帖,所以图片上焊了飞线。借用下评论区的一些图片。
3、分析
主控是apollo3 的ama3b,flash 1m,sram 384k,看网上资料还挺多的,ag真人试玩平台官网也有对应的sdk下载,可以采用keil和jar等编译。有人说sdk写的很好,有丝滑的感觉。于是想体验一下。看板子丝印,其中有2个测试点没有标注丝印,这个会不会是swd烧录口呢?焊上飞线试下果然是,更惊奇的是可以读取固件(后面附上),也就是说该手表可以烧自己的程序,玩腻了再烧回原来的固件。
这一下子来劲了,马上焊上飞线,接上逻辑分析仪测试时序。
时序有了,但是要自己写程序,有一个问题是:你知道是哪个gpio来控制的吗?比如屏的sck是那根线?有人说可以用万用表量啊,但是仔细看看板子主控是bga封装,根本无法测试,走线有些在内层。于是写了一个循环程序挨个判断是哪个gpio,并用逻辑分析仪查看波形。
最终得出如下gpio
马达 gpio18
lcd
lpe gpio23
sda gpio28
wr gpio33
sck gpio27
scs gpio1
rest gpio26
ledsw gpio4 高电平亮
ledk 10欧姆接地(负极)
leda 始终为高电平(正极)led打开时电压升高
tp
tp_lcd gpio2
int gpio34
sda gpio49
scl gpio48
rst gpio45
按键 gpio24 按键输入
lcd亮需要ledsw和tp_lcd都为高电平才可以
lcd初始化,应该是st7789的屏,分辨率240*240
rest复位 拉低10ms
0x11 sleep out
延时50ms
0x36 0x00
0x3a 0x05 interface pixel format
0xb2 0xc0 0xc0 0x00 0x33 0x33 porch control
0xb7 0x35 gate control
0xbb 0x38 vcom setting
0xc0 0x2c lcm control
0xc2 0x01 vdv and vrh command enable 只有1字节
0xc3 0x1a vrh set
0xc4 0x20 vdv setting
0xc6 0x0f fr control 2
0xd0 0xa4 0xa1 power control 1
0xe0 14bytes positive voltage gamma control
0xd0 0x09 0x10 0x0a 0x0a 0x26 0x34 0x44 0x4a 0x37 0x12 0x13 0x2e 0x33
0xe1 14bytes negative voltage gamma control
0xd0 0x09 0x10 0x0a 0x0a 0x26 0x34 0x44 0x4a 0x37 0x12 0x13 0x2e 0x33
0x21 display inversion on
0x2a 0x00 0x00 0x00 0xef 0 ~239 分辨率240*240
0x2b 0x00 0x28 0x01 0x17 40~279
0x29 display on
这样接口可时序都有了,那就体验丝滑的感觉吧。写个gpio模拟spi的程序,点亮屏幕。
4、变回原本的时钟
光显示个图片没啥用,还是显示个时间还有点用,于是东拼西凑折腾了时钟程序。借用了的程序 “240*240 tft 显示屏绘制表盘手把手教学,粗暴易懂”
在此表示感谢,最后效果图如下:
主程序很简单,也不管什么时间精度了,就是个演示,在这里贴上吧。
- #include "am_mcu_apollo.h"
- #include "am_bsp.h"
- #include "am_util.h"
- #include "rg_display.h"
- #include "cmt_spi4.h"
- #include "stdlib.h"
- #include "math.h"
- #define pi 3.14159
- #define hlen 50
- #define mlen 60
- #define slen 70
- #define hinterval 30
- #define ointerval 6
- int hour=0,minute=0,second=0;
- int tmphour=0,tmpminute=0,tmpsecond=0;
- bool dsiplayflag=1;
- int tcount=0;
- #define inputkey 24
- unsigned char key_read=0xff;
- unsigned char key_last=0xff;
- unsigned char key_temp=0;
- unsigned char key_hold = 0;
- unsigned int key_hold_cnt=0;
- unsigned char key_ok = 0;
- void drawclockhand(int len, int value, int _interval, uint32_t color)
- {
- float x, y;
- x = len * cos(value * _interval * pi / 180 - pi / 2) 120;
- y = len * sin(value * _interval * pi / 180 - pi / 2) 120;
- drawline(120, 120, x, y, color);
- }
- void cleardrawclockhand(int len, int value, int _interval)
- {
- float x, y;
- x = len * cos(value * _interval * pi / 180 - pi / 2) 120;
- y = len * sin(value * _interval * pi / 180 - pi / 2) 120;
- drawline(120, 120, x, y, c_black);
- }
- int main(void)
- {
- // set the clock frequency.
- am_hal_clkgen_control(am_hal_clkgen_control_sysclk_max, 0);
- // set the default cache configuration
- am_hal_cachectrl_config(&am_hal_cachectrl_defaults);
- am_hal_cachectrl_enable();
- // configure the board for low power operation.
- am_bsp_low_power_init();
- // initialize the printf interface for itm/swo output.
- // am_bsp_itm_printf_enable();
- // clear the terminal and print the banner.
- // am_util_stdio_terminal_clear();
- // am_util_stdio_printf("fast gpio example\n");
-
- am_util_delay_ms(1000);
- am_hal_gpio_pinconfig(tpvcc,g_am_hal_gpio_output_12);
- am_hal_gpio_output_set(tpvcc);
- am_hal_gpio_pinconfig(inputkey,g_am_hal_gpio_input_pullup);
- am_hal_gpio_enable_read(inputkey);
- ili9341_init();
- rg_display_bmp();
- // while(1);
- drawclockhand(slen, second, ointerval, c_white);
- drawclockhand(mlen, minute, ointerval, c_green);
- drawclockhand(hlen, hour, hinterval, c_red);
- drawcircle(120,120,5,c_white);
- while(1){
- am_util_delay_ms(20);
- tcount ;
- if(am_hal_gpio_input_read(inputkey))key_temp=0xff;
- else key_temp=1;
- if(key_temp!=0xff)
- {
- if(key_temp==key_last) { key_last=key_temp;key_hold=1;key_hold_cnt ;
- }
- else {key_last=key_temp; key_hold=0;key_hold_cnt=0; }
- }
- else
- {
- if(key_hold==1){key_read= key_last;key_last=0xff; key_ok=1; key_hold=0;key_hold_cnt=0;}
- }
-
- if(key_ok==1){dsiplayflag = !dsiplayflag;key_ok=0;}
- if(dsiplayflag)am_hal_gpio_output_set(ledsw);
- else am_hal_gpio_output_clear(ledsw);
-
- if(tcount == 50){
- tcount=0;
- second ;
- if(second==60){
- second=0;
- minute ;
- if(minute==60){
- minute=0;
- hour ;
- if(hour==12)hour=0;
- }
- }
- }
-
- if(dsiplayflag==1){
- if(hour != tmphour){
- cleardrawclockhand(hlen, tmphour, hinterval);
- tmphour=hour;
- }
- if(minute !=tmpminute){
- cleardrawclockhand(mlen, tmpminute, ointerval);
- tmpminute=minute;
- }
- if(second != tmpsecond){
- cleardrawclockhand(slen, tmpsecond, ointerval);
- tmpsecond=second;
- }
- drawclockhand(slen, second, ointerval, c_white);
- drawclockhand(mlen, minute, ointerval, c_green);
- drawclockhand(hlen, hour, hinterval, c_red);
- drawcircle(120,120,5,c_white);
- }
- }
- }
复制代码
5、破解原固件
上面只显示个表盘时钟显然不够折腾,看到评论区到处找能够用的app无果,那能否从固件入手,破解跳过配对过程是否可以?
下载了ghidra,果然强大,能看到很多信息。甚至能看到下载什么app,就是lovewin apk
于是全网搜索该app,国内网下载了个lovewin 2.0.56,安装后不能使用,尝试国外网站。搜到一些信息,如:
但是app始终无法下载。墙太厚了!!
找了半天,与其浪费时间,何不用下万能的tb,于是花5大圆请别人下载,安装一次配对成功进入界面!!!(后面附上)
而且这个app平台没有挂,能够与手表同步,实时测量心跳,感觉比那个什么“瑞克和莫蒂“的好,那个app平台已经挂了。
看下界面吧,可能很多人买了这个款手表积灰的现在可以拿出来了。
手机app界面
6、魔改手表
有了能够用的app和自编程序,于是想二合一,把手表装上用起来。魔改下:
首先引出swd的3根线
在后盖上打3个小孔以便穿线,最后合盖充电,哦,顺便更换下电池,原来的是200mah的电池,在这里更换为300mah的电话手表的电池。能够装上。希望待机时间长点。
充电显示有电流了191ma 。
7、最后附上装完图片,其实2款手表我都有。
8、附件
原手表固件和apk,注意固件分2个压缩包001和002(文件上传限制8m),2个都需要下载才可以。
(7.92 mb, 下载次数: 40)
(7.46 mb, 下载次数: 40)
(461.6 kb, 下载次数: 31)
吐槽,tb评论区什么人都有,有打广告的引诱装app的,有说找到app又什么信息都没有提供的,问了也不搭理的。搞这个就是个兴趣,学习下,大家共享下信息没什么啊,能损失什么呢?
搞不懂,小小的评论区见证了人生百态。
评论区阅读量有几千了,看来买这个手表的人还挺多,希望我发帖可以抛砖引玉,多多交流学习,谢谢观赏!
祝大家新年快乐!
补充内容 (2023-1-24 20:25):
感谢各位的捧场,谢谢!上面附件的描述有误,fithelper apk是分为2个压缩包,需要2个一起下载才可以。关于该手表ota升级功能我在111楼有详细的说明。 |
打赏
-
| 家元 781 |
理由
|
| 21 |
厉害厉害,会编程就是牛! |
| 50 |
優秀文章 |
邓穿石
| 20 |
優秀文章 |
杨雪飞
| 20 |
優秀文章 |
x067
| 20 |
|
| 20 |
優秀文章 |
| 20 |
謝謝分享 |
| 50 |
原創內容 |
| 60 |
牛人 |
xiaoxuanfeng
| 20 |
原創內容 |
|