ATMEL: The 4313 is here! - ATMEL: Các 4313 là ở đây!
One of the all-time favorite chips is the ATtiny2313.
It's a little 20-pin AVR microcontroller, it's one of those few chips that we used often enough to justify a custom breakout board.
If there's one thing that the '2313 is short on, it's memory. With 2 kB of flash (program) memory and 128 bytes of RAM, it's perfect for tiny single-purpose projects. But, it's oh-so-easy to run up against that memory limit. And, that's why we were so excited when Atmel began to announce their then-forthcoming ATtiny4313 in late 2009.
Unfortunately, it's often a long delay between when a chip is announced and when it's actually available through distribution.
Now, programming it. There are very few changes between the '2313 and '4313. Mainly, it's what you'd expect: memory sizes (Flash, SRAM, EEPROM are all doubled), and the device signature is different.
Recent versions of AVR-GCC already support the '4313, and so it's relatively straightforward to recompile an existing program (say, the Larson scanner firmware) to run on the '4313. There are some minor inconsistencies between the "io.h" header files for the two chips, and those inconsistencies can cause compiling to fail. For example, the register name "WDTCSR" (for watchdog control register) works on the '2313, but the '4313 io.h file lists that same register name as "WDTCR." So, if you run into a place where AVR-GCC is confused after switching chips, you might be able to solve the issue by comparing that register name in the "io.h" files for the two chips.
Now, for programming the chip with avrdude, things are slightly more complicated. Avrdude does not yet natively support the '4313, but fortunately, you can add the new chip definition by editing the avrdude.conf file on your system. (On my Mac, where I useCrosspack as the AVR toolchain, I found that file at /usr/local/CrossPack-AVR/etc/avrdude.conf ) The '4313 code block can be added right below the '2313 code block, and you can download that code block here (via this mailing list post). So, a couple of steps, but works like a charm.
ATMEL: Các 4313 là ở đây!
Một chip yêu thích của tất cả các thời gian là ATtiny2313.
Đó là một vi điều khiển AVR 20-pin ít, đó là một trong những chip mà chúng tôi sử dụng thường xuyên, đủ để biện minh cho một hội đồngquản trị breakout tùy chỉnh.
Nếu có một điều mà '2313 là ngắn hạn về bộ nhớ,. Với 2 MB bộ nhớ(chương trình) flash và 128 byte của RAM, nó hoàn hảo cho mục đíchdự án nhỏ duy nhất. Tuy nhiên, đó là oh-để-dễ dàng để chạy lên so vớigiới hạn bộ nhớ. Và, đó là lý do tại sao chúng tôi đã rất vui mừng khiAtmel bắt đầu công bố sau đó ATtiny4313 sắp tới của họ vào cuối năm 2009.
Thật không may, nó thường là một sự chậm trễ lâu dài giữa khi một con chip được công bố và khi nó thực sự có sẵn thông qua phân phối.
Bây giờ, lập trình. Có những thay đổi rất ít giữa '2313 và '4313. Chủ yếu, đó là những gì bạn mong muốn: kích thước bộ nhớ (Flash, SRAM, EEPROM được tăng gấp đôi), và chữ ký của thiết bị là khác nhau.
Phiên bản mới của AVR-GCC đã hỗ trợ '4313, và do đó, nó tương đốiđơn giản để biên dịch lại một chương trình hiện có (nói, phần mềm chomáy quét Larson) để chạy trên '4313. Có một số mâu thuẫn nhỏ giữa"io.h" tập tin tiêu đề cho hai chip, và những mâu thuẫn có thể gây rabiên dịch thất bại. Ví dụ, tên đăng ký "WDTCSR" (cho cơ quan giám sátkiểm soát đăng ký) hoạt động trên các '2313, nhưng '4313 io.h tập tinliệt kê rằng cùng một tên đăng ký là "WDTCR." Vì vậy, nếu bạn chạy vào một nơi AVR-GCC là nhầm lẫn sau khi chip chuyển đổi, bạn có thểcó thể giải quyết vấn đề bằng cách so sánh rằng tên đăng ký trong"io.h" các tập tin cho hai chip.
Bây giờ, đối với lập trình chip với avrdude, điều này là hơi phức tạp hơn. Avrdude không chưa hỗ trợ '4313, nhưng may mắn thay, bạn có thể thêm định nghĩa chip mới bằng cách chỉnh sửa các tập tinavrdude.conf trên hệ thống của bạn. (Trên máy Mac của tôi, nơi tôiuseCrosspack như AVR toolchain, tôi nhận thấy rằng tập tin / usr / local/ CrossPack-AVR / etc / avrdude.conf) khối '4313 mã có thể được thêmvào ngay bên dưới các khối mã '2313, bạn có thể tải về mà khối mã ởđây ( xem dưới đây ). Vì vậy, một vài bước,nhưng các công trình như một say mê.
#------------------------------------------------------------
# ATtiny4313
#------------------------------------------------------------
part
id = "t4313";
desc = "ATtiny4313";
has_debugwire = yes;
flash_instr = 0xB2, 0x0F, 0x1F;
eeprom_instr = 0xBB, 0xFE, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D,
0xBA, 0x0F, 0xB2, 0x0F, 0xBA, 0x0D, 0xBB, 0xBC,
0x99, 0xE1, 0xBB, 0xAC;
stk500_devcode = 0x23;
## Use the ATtiny26 devcode:
avr910_devcode = 0x5e;
signature = 0x1e 0x92 0x0d;
pagel = 0xD4;
bs2 = 0xD6;
reset = io;
chip_erase_delay = 9000;
pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
"x x x x x x x x x x x x x x x x";
chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
"x x x x x x x x x x x x x x x x";
timeout = 200;
stabdelay = 100;
cmdexedelay = 25;
synchloops = 32;
bytedelay = 0;
pollindex = 3;
pollvalue = 0x53;
predelay = 1;
postdelay = 1;
pollmethod = 1;
pp_controlstack =
0x0E, 0x1E, 0x0E, 0x1E, 0x2E, 0x3E, 0x2E, 0x3E,
0x4E, 0x5E, 0x4E, 0x5E, 0x6E, 0x7E, 0x6E, 0x7E,
0x26, 0x36, 0x66, 0x76, 0x2A, 0x3A, 0x6A, 0x7A,
0x2E, 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;
memory "eeprom"
size = 256;
paged = no;
page_size = 4;
min_write_delay = 4000;
max_write_delay = 4500;
readback_p1 = 0xff;
readback_p2 = 0xff;
read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x",
"a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o";
write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x",
"a7 a6 a5 a4 a3 a2 a1 a0 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 0 a1 a0",
" i i i i i i i i";
writepage = " 1 1 0 0 0 0 1 0",
" 0 0 x x x x x x",
" a7 a6 a5 a4 a3 a2 0 0",
" x x x x x x x x";
mode = 0x41;
delay = 6;
blocksize = 4;
readsize = 256;
;
memory "flash"
paged = yes;
size = 4096;
page_size = 64;
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 0 0 0 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
read_hi = " 0 0 1 0 1 0 0 0",
" 0 0 0 0 0 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
# The information in the data sheet of April/2004 is wrong, this works:
loadpage_lo = " 0 1 0 0 0 0 0 0",
" 0 0 0 x x x x x",
" x x x x a3 a2 a1 a0",
" i i i i i i i i";
# The information in the data sheet of April/2004 is wrong, this works:
loadpage_hi = " 0 1 0 0 1 0 0 0",
" 0 0 0 x x x x x",
" x x x x a3 a2 a1 a0",
" i i i i i i i i";
# The information in the data sheet of April/2004 is wrong, this works:
writepage = " 0 1 0 0 1 1 0 0",
" 0 0 0 0 0 a10 a9 a8",
" a7 a6 a5 a4 x x x x",
" x x x x x x x x";
mode = 0x41;
delay = 6;
blocksize = 32;
readsize = 256;
;
# ATtiny4313 has Signature Bytes: 0x1E 0x92 0x0D.
memory "signature"
size = 3;
read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
"x x x x x x a1 a0 o o o o o o o o";
;
memory "lock"
size = 1;
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
"x x x x x x x x x x o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
;
memory "lfuse"
size = 1;
write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
"x x x x x x x x i i i i i i i i";
read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
"x x x x x x x x o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
;
memory "hfuse"
size = 1;
write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
"x x x x x x x x i i i i i i i i";
read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
"x x x x x x x x o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
;
memory "efuse"
size = 1;
write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
"x x x x x x x x x x x x x x x i";
read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
"x x x x x x x x o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
;
# The Tiny4313 has calibration data for both 4 MHz and 8 MHz.
# The information in the data sheet of April/2004 is wrong, this works:
memory "calibration"
size = 2;
read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
"0 0 0 0 0 0 0 a0 o o o o o o o o";
;
;
Thể hiện trước đó trong E V I L
No comments:
Post a Comment