个性LGT仿真器打造 & 在Ubuntu下使用攻略
本帖最后由 xwkm 于 2013-1-3 02:44 编辑首先就是在阿莫这里买一块仿真器,或者自己拿新唐的片子写一个(那个SWD时钟看得头大没分析出来协议),把那个U盘的bootloader写入就行。
然后用镊子捅仿真器的J4。
按住镊子不要动,然后插上仿真器看到
后拿下镊子到mcugreen.com下载最新的SWDICE mkII studio 4版本。别搞错了。搞错了avrdude和avarice不支持!
把bin文件复制进去。点弹出,拔下USB线再插上就搞定了固件了。
顺带说下上次我申请的仿真器有一处小瑕疵,看R20给焊反了……
安装驱动程序:
打开终端,输入:
sudo gedit /etc/udev/rules.d/60-avrmkii.rules
在打开的窗口中复制下面内容粘贴然后保存
SUBSYSTEM!="usb_device", ACTION!="add", GOTO="avrisp_end"
# Atmel Corp. JTAG ICE mkII
ATTR{idVendor}=="03eb", SYSFS{idProduct}=="2103", MODE="660", GROUP="dialout"
# Atmel Corp. AVRISP mkII
ATTR{idVendor}=="03eb", SYSFS{idProduct}=="2104", MODE="660", GROUP="dialout"
# Atmel Corp. Dragon
ATTR{idVendor}=="03eb", SYSFS{idProduct}=="2107", MODE="660", GROUP="dialout"
LABEL="avrisp_end"
接着执行
sudo restart udevd
然后后面就简单了。avrdude该怎么用怎么用,不过注意一下,因为LGT的仿真器报告的ID是164P的,所以avrdude也必须只能用164P的ID.
而且仿真器报告的熔丝avrdude认为不是安全的,所以需要-F来强制写入。
比如说这个命令就是可行的:
avrdude -p m164p -c jtag2 -P usb -F -e -U flash:w:XXXX.hex
另外就是avarice同样也是可以使用的,输入如下命令:
avarice --program--file xxxx.elf --part atmega164p --mkII -j usb localhost:4242
接着可以用gdb调,教程一搜一大把。我就不讲了。
现在真心希望官方把ISP时序开源了。毕竟连着这个“mkII”总是觉得怪怪的……
顺带换了LED:RUN、POWER变翠绿了。
支持一下!很不错!!! 收藏备用。
谢谢楼主 顺带说下。如果嫌avrdude没有lgt8f08a太难看的话。打开/etc/avrdude.conf。加入:
#------------------------------------------------------------
# LGT8F08A
#------------------------------------------------------------
# close to ATmega16
part
id = "l8a";
desc = "LGT8F08A";
has_jtag = yes;
stk500_devcode = 0x82; # no STK500v1 support, use the ATmega16 one
avr910_devcode = 0x74;
signature = 0x1e 0x1e 0x1e;
pagel = 0xd7;
bs2 = 0xa0;
chip_erase_delay = 9000;
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 = 1;
resetdelayus = 0;
hvleavestabdelay = 15;
chiperasepulsewidth = 0;
chiperasepolltimeout = 10;
programfusepulsewidth = 0;
programfusepolltimeout = 5;
programlockpulsewidth = 0;
programlockpolltimeout = 5;
idr = 0x31;
spmcr = 0x57;
allowfullpagebitstream = no;
memory "eeprom"
paged = no; /* leave this "no" */
page_size = 4;/* for parallel programming */
size = 512;
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 xa9a8",
" a7a6a5a4 a3a2a1a0",
"o o o o o o o o";
write = "1 1 0 0 0 0 0 0",
"0 0 x x x xa9a8",
" a7a6a5a4 a3a2a1a0",
"i i i i i i i i";
loadpage_lo = "1 1 0 0 0 0 0 1",
"0 0 0 0 0 0 0 0",
"0 0 0 0 0 0a1a0",
"i i i i i i i i";
writepage = "1 1 0 0 0 0 1 0",
"0 0 x x x xa9a8",
" a7a6a5a4 a3a2 0 0",
"x x x x x x x x";
mode = 0x41;
delay = 10;
blocksize = 128;
readsize = 256;
;
memory "flash"
paged = yes;
size = 8192;
page_size = 128;
num_pages = 64;
min_write_delay = 4500;
max_write_delay = 4500;
readback_p1 = 0xff;
readback_p2 = 0xff;
read_lo = "0 0 1 0 0 0 0 0",
"0 0 a13 a12 a11 a10a9a8",
" a7a6a5a4 a3a2a1a0",
"o o o o o o o o";
read_hi = "0 0 1 0 1 0 0 0",
"0 0 a13 a12 a11 a10a9a8",
" a7a6a5a4 a3a2a1a0",
"o o o o o o o o";
loadpage_lo = "0 1 0 0 0 0 0 0",
"0 0 x x x x x x",
"x xa5a4 a3a2a1a0",
"i i i i i i i i";
loadpage_hi = "0 1 0 0 1 0 0 0",
"0 0 x x x x x x",
"x xa5a4 a3a2a1a0",
"i i i i i i i i";
writepage = "0 1 0 0 1 1 0 0",
"0 0 a13 a12 a11 a10a9a8",
" a7a6 x x x x x x",
"x x x x x x x x";
mode = 0x21;
delay = 8;
blocksize = 128;
readsize = 256;
;
memory "lfuse"
size = 1;
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";
min_write_delay = 9000;
max_write_delay = 9000;
;
memory "hfuse"
size = 1;
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";
min_write_delay = 9000;
max_write_delay = 9000;
;
memory "efuse"
size = 1;
read = "0 1 0 10 0 0 00 0 0 01 0 0 0",
"x x x xx x x xo o o oo o o o";
write = "1 0 1 01 1 0 01 0 1 00 1 0 0",
"x x x xx x x x1 1 1 11 i i i";
min_write_delay = 9000;
max_write_delay = 9000;
;
memory "signature"
size = 3;
read = "0011 0000 xxxx xxxx",
"xxxx xx a1 a0 oooo oooo";
;
memory "calibration"
size = 1;
read = "0 0 1 11 0 0 0 0 0 0 xx x x x",
"0 0 0 00 0 0 0 o o o oo o o o";
;
;
然后就可以使用-p l8a了 顺带提醒一下。SWD和SWC上的上拉电阻至少要更换成4.7k的。否则极易被干扰,导致程序无法写入。不过这次我硬上用0805电阻焊到了0603焊盘上…… avrdude对LGT mkII的支持相当不好,建议使用avarice来高。虽然说写eeprom不太方便。
avarice --program--erase --file kmlamp.elf --part atmega164p --mkII -j usb 标记一下,备用 你好,请问“首先就是在阿莫这里买一块仿真器,或者自己拿新唐的片子写一个(那个SWD时钟看得头大没分析出来协议),把那个U盘的bootloader写入就行。
然后用镊子捅仿真器的J4。”
U盘的bootloader的固件哪里能找到?
LICHANGAN726 发表于 2013-3-5 23:10 static/image/common/back.gif
你好,请问“首先就是在阿莫这里买一块仿真器,或者自己拿新唐的片子写一个(那个SWD时钟看得头大没分析出来 ...
在LGT分坛里搜索“仿真器 升级”即可。有boot的固件。如果你直接买仿真器的话就不用bootloader 如此好贴,今天才看到{:lol:}
多谢!! 楼主强人啊,唯鲁有才。
页:
[1]