goodcode 发表于 2012-8-19 03:16:25

基于51内核的LGTISP



上位机, 固件, 电路图


蛋疼的东西{:lol:}

解决鸡生蛋蛋疼鸡的问题.

只完成了
功能:
1.FLASH 读/写
2.熔丝 读

其它功能也不想完成了本来没啥用的玩意, 随便找个51开发板临时搭建一下用用而已.
电平转换电路网上找的实际测试是能用的, MISO还是有倒灌电流的, 不过很小. 没测试直接连接会不会烧掉lgtmcu
附件里的固件是基于stc89c52的, 使用6T模式. 明天在发个普通的12T的

3:07:45 进入编程模式成功...
3:07:45 读取Flash地址 0000 完成..
...
3:07:53 读取Flash地址 0FE0 完成...
3:07:53 全部Flash读取完成.

读8kflash8秒左右

sibtck 发表于 2012-8-19 03:59:31

太牛屄了!!!.........

renpeng009 发表于 2012-8-19 06:17:20

有源码就更好了

mowin 发表于 2012-8-19 06:59:45

牛b,帮顶

zcx2012 发表于 2012-8-19 07:16:10

牛X,你怎么知道ISP的协议的

zyyn123 发表于 2012-8-19 09:20:51

楼主挺牛的

bbs2009 发表于 2012-8-19 11:19:30

不错 帮顶{:victory:}{:victory:}{:victory:}

zqy 发表于 2012-8-19 11:24:20

这个好,楼主继续努力。

liujian6f 发表于 2012-8-19 11:47:18

好 这个决对支持

goodcode 发表于 2012-8-19 12:21:45

本帖最后由 goodcode 于 2012-8-19 16:04 编辑



LGT8XISP(51x) 1.01 Build 120819
16:02:21 功能:
16:02:21 1.FLASH 读/写
16:02:21 2.EEPROM 读/写
16:02:21 3.熔丝 读/写

12T单片机用57600波特率 6T单片机用115200波特率

附件包含上位机, 下位机6t,12t两个版本固件

logicgreen 发表于 2012-8-19 19:10:29

值得顶一下。

wangzhph 发表于 2012-8-19 23:59:12

一直关注isp的diy版,终于有高手出来了,顶起!

wkman 发表于 2012-8-20 00:25:24

{:titter:}

这下可以考虑买几片lgt耍耍了,,,,学avr吃独食,可不是个好路子,,,{:titter:}

BXAK 发表于 2012-8-20 01:43:20

怎么两个附件都无法下载

xwkm 发表于 2012-8-26 06:01:00

本帖最后由 xwkm 于 2012-8-26 07:18 编辑

求LZ联系方式,我Q 562467068。如果能P一份协议就好了……我在linux下面,估计只能用并口搞了……

Hamyou 发表于 2012-8-27 09:46:46

太牛了,这下不用买专门的ISP了

halloocc 发表于 2012-8-27 13:20:55

1T 的STC 工具可以烧录12T的固件,ISP连接正常,报无法进编程模式。用ATMEL 4051 烧录12T的固件,串口ISP无反应。LZ可知是什么原因阿?{:sad:}

goodcode 发表于 2012-8-27 15:11:03

stc 1t 单片机可能是不行, 因为用的软spi 1t的速度可能太快, 有逻辑分析仪可以看看spi输出的速率是多少超过1600000bps 就不能进入编程模式了

至于ATMEL4051 不知道你看我的电路图和4051的数据手册了没有
1.没有P0口, 这个我重新改IO定义倒是没问题,
2.ram只有128字节, 程序需要至少256字节的芯片支持 这个我尝试过 没有办法优化到128字节ram的芯片上

halloocc 发表于 2012-8-27 16:59:34

谢LZ阿, 今天拿了片89c52rc,将3.3v的npn/pnp 的驱动部分省略, 直接将LGT的引脚和 P0 接,开始担心LGT 会炸飞, 还带了钢盔,,{:biggrin:} ,测试LZ的 上位机 工作 正常, 读写fuse/eeprom/flash 都可以, 烧了个流水灯 也正常。 好像 LGT在5v 下 电平 也可接受的 {:victory:}

用4051,我反汇编了LZ的HEX文件, 将P0 口 改了P1 口的,主要问题是 4051 串口ISP无反应。

托LZ的福, 总算有LGT的ISP用了。{:lol:}{:lol:}{:lol:}

halloocc 发表于 2012-8-27 17:03:35

哦,4051的128ram是小了,可惜STC11F04E 又太快了, 89c52rc 又太大了。{:mad:} 能用就好。{:shutup:}

goodcode 发表于 2012-8-27 19:35:21

{:lol:}它只是个桥而已

goodcode 发表于 2012-8-27 19:44:34

halloocc 发表于 2012-8-27 16:59 static/image/common/back.gif
谢LZ阿, 今天拿了片89c52rc,将3.3v的npn/pnp 的驱动部分省略, 直接将LGT的引脚和 P0 接,开始担心LGT 会 ...

虽然有直接用5v连接的冲动, 但是我始终没有测试, 因为我那芯片是焊接在洞洞板上 要是烧了重新焊接会崩溃

4051的主要问题是在ram 程序用了idata如果非要降低ram的使用连着上位机都要修改 是相当麻烦

STC11F04E 这个既然你能找到端口设定相信你也找到了ispTransmit_sw'

                            509 ;Allocation info for local variables in function 'ispTransmit_sw'
                            510 ;------------------------------------------------------------
                            511 ;out_byte                  Allocated to registers r7
                            512 ;i                         Allocated to registers r6
                            513 ;------------------------------------------------------------
                            514 ;        isp.c:218: uchar ispTransmit_sw(uchar out_byte)
                            515 ;        -----------------------------------------
                            516 ;       function ispTransmit_sw
                            517 ;        -----------------------------------------
   0047                     518 _ispTransmit_sw:
   0047 AF 82               519         mov        r7,dpl
                            520 ;        isp.c:221: do
   0049 7E 08               521         mov        r6,#0x08
   004B                     522 00103$:
                            523 ;        isp.c:223: MOSI = out_byte & 0x80;
   004B EF                  524         mov        a,r7
   004C 33                  525         rlc        a
   004D 92*00               526         mov_ispTransmit_sw_sloc0_1_0,c
   004F 92 80               527         mov        _P0_0,c
                            528 ;        isp.c:224: out_byte <<= 1;
   0051 EF                  529         mov        a,r7
   0052 2F                  530         add        a,r7
   0053 FF                  531         mov        r7,a
                            532 ;        isp.c:225: MCLK = 1;
   0054 D2 82               533         setb        _P0_2
                            534 ;        isp.c:227: if(MISO)
   0056 30 83 01            535         jnb        _P0_3,00102$
                            536 ;        isp.c:228: out_byte += 1;
   0059 0F                  537         inc        r7
   005A                     538 00102$:
                            539 ;        isp.c:229: MCLK = 0;
   005A C2 82               540         clr        _P0_2
                            541 ;        isp.c:231: while(--i);
   005C DE ED               542         djnz        r6,00103$
                            543 ;        isp.c:232: return out_byte;
   005E 8F 82               544         mov        dpl,r7
   0060 22                  545         ret

原型

uchar ispTransmit_sw(uchar out_byte)
{
    uchar i=8;
    do
    {
      MOSI = out_byte & 0x80;
      out_byte <<= 1;
      MCLK = 1;
      /* __asm nop __endasm; */ /* for slow peripherals */
      if(MISO)
            out_byte += 1;
      MCLK = 0;
    }
    while(--i);
    return out_byte;
}

如果io定义没问题, 插nop就是了{:lol:}

真希望lgt手册上写兼容5v的电平{:lol:}

wmm20031015 发表于 2012-8-27 19:58:36

楼主看看新唐的N79E8132是否合用,SOP16封装,内部22.1184M时钟,工作电压2.4~5.5V,
不知道为啥不能上传文件

xwkm 发表于 2012-8-28 07:24:55

goodcode 发表于 2012-8-27 19:44 static/image/common/back.gif
虽然有直接用5v连接的冲动, 但是我始终没有测试, 因为我那芯片是焊接在洞洞板上 要是烧了重新焊接会崩溃
...

你的SPI函数写的太慢了。可以先把ACC的8个位拉出来。然后依次从高到低发送。并且拉出B的8个位来,从高到低接收。

xwkm 发表于 2012-8-28 07:31:52

本帖最后由 xwkm 于 2012-8-28 07:36 编辑

我早就反汇编了你的玩意。

找到了SPI的发送。然后顺带找到了命令发送以及串口计数:

cjne        R6, #5Ah, label74 这个是检测6单元是否是0x5A,如果是那么就正确。
猜想r6 给分配到result上去了。push r6是因为spi要用。
下面的貌似是给芯片发送ENABLE

你的串口我挂上了监听看,4个byte一条命令,每条命令0x5A开头

串口初始化:

xwkm 发表于 2012-8-28 07:33:44

那个var1是counter,计数串口来的,主程序一直检测,大于三就CLR,继续执行,可是现在基本上找不出那一段是写熔丝和写数据的……读出的可能已经找到了,写入的还在找,

xwkm 发表于 2012-8-28 07:38:22

P0去掉上拉电阻完全可以直接链接LGT,只要保证LGT有上拉,或者P0上拉到3.3V

hclin 发表于 2012-8-28 09:14:22

very good !!!

goodcode 发表于 2012-8-28 14:50:22

我那个51开发板p0已经上拉断不开, 理论上使用p0开漏加上拉也是可以的 没测试过
这个51版本没考虑过优化 spi函数只是网上拷贝 编译器sdcc

这种小尺寸的东西发布二进制跟发布源码本来区别就不大, 唯一的区别就是前者你要多付出一些才能看懂而已.

为什么不发布协议源代码也许你全部逆向完会懂

单独逆向下位机不容易理解, 建议你配合上位机通讯协议来逆向, 先分析上位机的协议格式和命令id, 下位机找到命令处理的分支一切就简单了.


{:lol:}

xwkm 发表于 2012-8-28 17:42:18

goodcode 发表于 2012-8-28 14:50 static/image/common/back.gif
我那个51开发板p0已经上拉断不开, 理论上使用p0开漏加上拉也是可以的 没测试过
这个51版本没考虑过优化 spi ...

我也是用sdcc的……
至于我还要费劲跟你的程序。LGT手上也没有。也不方便调试,你还是开了源吧……
P0上拉直接把电阻焊下来/做个开关就行了。
逆向用MCU8051IDE跟踪程序还顺便开虚拟串实在是太麻烦了……

okplay 发表于 2012-8-28 17:51:31

楼主,再补上一个Bootloader就完整了。

goodcode 发表于 2012-8-28 22:16:43

xwkm 发表于 2012-8-28 17:42 static/image/common/back.gif
我也是用sdcc的……
至于我还要费劲跟你的程序。LGT手上也没有。也不方便调试,你还是开了源吧……
P0上 ...

逆向用ida

goodcode 发表于 2012-8-28 22:20:45

okplay 发表于 2012-8-28 17:51 static/image/common/back.gif
楼主,再补上一个Bootloader就完整了。

这个我有个蛋疼的想法没实现过只是猜的
在flash空间尾端放置bootloader代码, bootloader在写入flash修改写入代码的复位中断到bootloader区段, 还要找个地方放flash写入代码的原复位中断.

xwkm 发表于 2012-8-29 10:07:55

goodcode 发表于 2012-8-28 22:16 static/image/common/back.gif
逆向用ida

在linux下用mcu8051ide

fydzaa 发表于 2012-12-2 15:53:55

小手一抖,经验拿走

hubeilcsun3 发表于 2012-12-5 18:27:42

{:lol:}{:victory:}
页: [1]
查看完整版本: 基于51内核的LGTISP