goodcode 发表于 2012-8-26 13:57:39

M8 USBasp LGT 版

手里有两块m8的usbasp板 支持5 3.3供电 最早逆向lgt isp协议就是想弄到这个上. 看坛里不少朋友v-usb有兼容问题所以先做了串口版本
实际测试和优化后应该是没有硬件串口的速度快
看到坛里有说linux下无法开发lgt的所以发一下吧
支持avrdude, progisp172

progisp172 选择m8芯片 读识别符也是m8的
avrdude 可以再avrdude.conf中加入一个芯片看着也许舒服点

#------------------------------------------------------------
# LGT8F0*A
#------------------------------------------------------------

part
    id               = "lgt8f08a";
    desc             = "LGT8F08A";
    stk500_devcode   = 0x70;
    avr910_devcode   = 0x76;
    signature      = 0x1e 0x93 0x07;
    pagel            = 0xd7;
    bs2            = 0xc2;
    chip_erase_delay = 10000;
    pgm_enable       = "1 0 1 01 1 0 0    0 1 0 10 0 1 1",
                     "x x x xx x x x    x x x xx x x x";

    chip_erase       = "1 0 1 01 1 0 0    1 0 0 xx x x x",
                     "x x x xx x x x    x x x xx x x x";

    timeout                = 200;
    stabdelay                = 100;
    cmdexedelay                = 25;
    synchloops                = 32;
    bytedelay                = 0;
    pollindex                = 3;
    pollvalue                = 0x53;
    predelay                = 1;
    postdelay                = 1;
    pollmethod                = 0;

    pp_controlstack   =
        0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
        0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
        0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
        0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
    hventerstabdelay    = 100;
    progmodedelay       = 0;
    latchcycles         = 5;
    togglevtg         = 1;
    poweroffdelay       = 15;
    resetdelayms      = 2;
    resetdelayus      = 0;
    hvleavestabdelay    = 15;
    resetdelay          = 15;
    chiperasepulsewidth = 0;
    chiperasepolltimeout = 10;
    programfusepulsewidth = 0;
    programfusepolltimeout = 5;
    programlockpulsewidth = 0;
    programlockpolltimeout = 5;

    memory "eeprom"
      size            = 504;
      page_size       = 4;
      min_write_delay = 9000;
      max_write_delay = 9000;
      readback_p1   = 0xff;
      readback_p2   = 0xff;
        read            = "1   0   1   0      0   0   0   0",
                        "0   0   x   x      x   x   xa8",
                        " a7a6a5a4   a3a2a1a0",
                        "o   o   o   o      o   o   o   o";

        write         = "1   1   0   0      0   0   0   0",
                        "0   0   x   x      x   x   xa8",
                        " a7a6a5a4   a3a2a1a0",
                        "i   i   i   i      i   i   i   i";

        mode                = 0x04;
        delay                = 20;
        blocksize        = 128;
        readsize        = 256;
      ;
    memory "flash"
      paged         = yes;
      size            = 8192;
      page_size       = 64;
      num_pages       = 128;
      min_write_delay = 4500;
      max_write_delay = 4500;
      readback_p1   = 0xff;
      readback_p2   = 0x00;
      read_lo         = "0   0   1   0    0   0   0   0",
                        "0   0   0   0a11 a10a9a8",
                        " a7a6a5a4   a3a2a1a0",
                        "o   o   o   o    o   o   o   o";

      read_hi         = "0   0   1   0    1   0   0   0",
                        "0   0   0   0a11 a10a9a8",
                        " a7a6a5a4   a3a2a1a0",
                        "o   o   o   o    o   o   o   o";

      loadpage_lo   = "0   1   0   0      0   0   0   0",
                        "0   0   0   0      x   x   x   x",
                        "x   x   xa4   a3a2a1a0",
                        "i   i   i   i      i   i   i   i";

      loadpage_hi   = "0   1   0   0      1   0   0   0",
                        "0   0   0   0      x   x   x   x",
                        "x   x   xa4   a3a2a1a0",
                        "i   i   i   i      i   i   i   i";

      writepage       = "0   1   0   0      1   1   0   0",
                        "0   0   0   0    a11 a10a9a8",
                        " a7a6a5   x      x   x   x   x",
                        "x   x   x   x      x   x   x   x";

        mode                = 0x21;
        delay                = 10;
        blocksize        = 64;
        readsize        = 256;
      ;

    memory "lfuse"
      size            = 1;
      min_write_delay = 2000;
      max_write_delay = 2000;
      read            = "0 1 0 10 0 0 0   0 0 0 00 0 0 0",
                        "x x x xx x x x   o o o oo o o o";

      write         = "1 0 1 01 1 0 0   1 0 1 00 0 0 0",
                        "x x x xx x x x   i i i ii i i i";
      ;

    memory "hfuse"
      size            = 1;
      min_write_delay = 2000;
      max_write_delay = 2000;
      read            = "0 1 0 11 0 0 0   0 0 0 01 0 0 0",
                        "x x x xx x x x   o o o oo o o o";

      write         = "1 0 1 01 1 0 0   1 0 1 01 0 0 0",
                        "x x x xx x x x   i i i ii i i i";
      ;

    memory "lock"
      size            = 1;
      min_write_delay = 2000;
      max_write_delay = 2000;
      read            = "0 1 0 11 0 0 0   0 0 0 00 0 0 0",
                        "x x x xx x x x   x x o oo o o o";

      write         = "1 0 1 01 1 0 0   1 1 1 xx x x x",
                        "x x x xx x x x   1 1 i ii i i i";
      ;

    memory "calibration"
      size            = 4;
      read            = "0011   1000   00xx   xxxx",
                        "0000   00 a1 a0   oooo   oooo";
      ;

    memory "signature"
      size            = 3;
      read            = "0011   0000   xxxx   xxxx",
                        "xxxx   xx a1 a0   oooo   oooo";
      ;
;

问过官方 isp协议有没有读取芯片标示的命令, 没有回应, 只能用m8代替

lgt的isp速度可能是 1600000bps 左右 再高就不能进入编程模式了
理论最高读取速度约20000Byte/S
理论最高写速度约13333Byte/S
以上都是猜的.

progisp172 的usb包是128字节
avrdude 的usb包是200字节
progisp172 也许更快点

我手里usbasp的电路图 别人的东西我买的现成的 谢谢这位哥们卖的相当便宜

基于上面硬件的固件

usbasp的官方电路图 我看io定义是一样的 没测试过

目前发布了基于51内核的串口isp, 基于lgt芯片的串口isp, 基于m8 usbasp硬件的v-usb接口isp


啥时候给个精华{:lol:}

avrdude 读写eeprom
avrdude -p lgt8f08a -c usbasp -U eeprom:r:"R:/eeprom.bin":r
avrdude -p lgt8f08a -c usbasp -U eeprom:w:"R:/eeprom1.bin":r

avrdude 读写flash
avrdude -p lgt8f08a -c usbasp -u -U flash:r:"R:/flash.bin":r
avrdude -p lgt8f08a -c usbasp -U flash:w:"R:/test_firmware.hex":i


加密位
LB1 LB2 同时置位为芯片加密

熔丝
SPIEN置位为熔丝使能

熔丝低位0:5是rc校准

xwkm 发表于 2012-8-26 14:01:08

我说啥时候给个时序……

mowin 发表于 2012-8-26 15:24:07

楼主你能折腾,赞一个

renwocai 发表于 2012-8-27 09:56:32

看了楼主的几个帖子,对于LGT的ISP真是有研究啊

oste_ 发表于 2012-8-27 11:30:42

强,usbasp在您哪真的发挥效用了。

goodcode 发表于 2012-8-27 11:41:16

oste_ 发表于 2012-8-27 11:30 static/image/common/back.gif
强,usbasp在您哪真的发挥效用了。

还得谢谢你, 一块板子当usbasp用,另外一块用的InfraHID的固件当遥控器用{:lol:}

zhifeng 发表于 2012-8-28 09:06:59

to:goodcode   你可以修改 progisp1.72的 xml 文件直接添加 agt的芯片。不明白的可以直接复制 mega8的 改名就可以了

n0831 发表于 2012-8-28 11:50:28

不明白为什么官方不公开编程协议。

goodcode 发表于 2012-8-28 14:28:27

zhifeng 发表于 2012-8-28 09:06 static/image/common/back.gif
to:goodcode   你可以修改 progisp1.72的 xml 文件直接添加 agt的芯片。不明白的可以直接复制 mega8的 改 ...

我是这样定义的
<CLASS6>
    <NAME>LGTXXX</NAME>
    <TYPE0>
      <NAME>LGT</NAME>
      <PART0>
            <NAME>LGT8F08A</NAME>
            <prgClass>3</prgClass>
            <ChipClass>0</ChipClass>
            <SubClass>1</SubClass>
            <ZIFNO>5</ZIFNO>
            <flashsize>8192</flashsize>
            <pagesize>64</pagesize>
            <XmlName>ATmega8.xml</XmlName>
      </PART0>
    </TYPE0>
</CLASS6>

不知道eeprom的大小如何定义

zhifeng 发表于 2012-8-28 16:35:54

<XmlName>ATmega8.xml</XmlName>在这个文件中改。 在 eng目录下

zhifeng 发表于 2012-8-28 16:44:10

to:goodcode具体你可以加我qq 聊

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

zhifeng 发表于 2012-8-28 16:44 static/image/common/back.gif
to:goodcode具体你可以加我qq 聊

谢谢zhifeng的提示和为大家提供的强大的上位机软件


固件更新 版本120828 附件已包含progisp172需要的文件覆盖即可
*修改熔丝使能位为熔丝高位值的最低位
+LGT8F08A.xml progisp172 支持选择芯片LGT8F08A

注意: 当前默认自动SPI频率1.5 MHz, 在修改RC修正值后可能会引起进入不了编程模式. 我试着用progisp172左侧的编程速度选择更低速好像无效.
看看碰到的人多不多吧, 多的话就在进入编程模式时失败尝试降低速度吧.





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

胡乱测试折腾的过程中目标芯片有一次编程完就无响应了, swd擦除后写入flash也提示错误. 后来直接在AVR Studio 4中点调试又能用了...
再后来修改usbasp的代码将isp速度降低到750k isp也能正常用了 恢复rc校准之后恢复到1500k的速度也能用了
难道芯片启动就会读取rc的校准值?......

hclin 发表于 2012-8-31 13:42:48

not bad !!!

malsvent 发表于 2013-1-17 16:35:57

本帖最后由 malsvent 于 2013-1-17 16:40 编辑

用M8L的USBasp写LGT的时遇到的状况

无论怎么写入验证都错误
连blank check都显示有问题

M8L(3.3V) → LGT(3.3V) = 失败
M8L(5V) → LGT(3.3V) = 失败
M8L(5V) → LGT(5V) = 正常

如果还有人弄半天出不来的
试试直接拿5V来捅LGT吧{:sweat:}

goodcode 发表于 2013-1-17 19:22:16

malsvent 发表于 2013-1-17 16:35 static/image/common/back.gif
用M8L的USBasp写LGT的时遇到的状况

无论怎么写入验证都错误


最近一两天会发布m8芯片的三合一版本

不过你的测试我也很不解 我还一次没尝试过5v电平接到lgt芯片上 看坛友的测试好像5v接到lgt上也没问题
我在昨天测试三合一半版本时使用的还是3.3v 没有问题{:sweat:}

xwkm 发表于 2013-2-13 12:13:14

goodcode 发表于 2013-1-17 19:22 static/image/common/back.gif
最近一两天会发布m8芯片的三合一版本

不过你的测试我也很不解 我还一次没尝试过5v电平接到lgt芯片上 看 ...

这个问题就是M8 IO是5V的原因。而且设置的是推挽而不是开漏模式。导致的这个问题。
直接接5V确实会导致LGT失去响应。

changshs 发表于 2013-11-9 16:23:08

{:handshake:}{:handshake:}{:handshake:}{:handshake:}{:handshake:}
页: [1]
查看完整版本: M8 USBasp LGT 版