2012-05-09

ATMEL: The 4313 is here! - ATMEL: Các 4313 là ở đây!

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.

ATtiny4313-PU

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. 



4313 - 3



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  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  một điều mà '2313  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ấtTuy nhiên, đó là oh-để-dễ dàng để chạy lên so vớigiới hạn bộ nhớđó 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 maynó 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  '4313Chủ yếu, đó là những gì bạn mong muốnkích thước bộ nhớ (Flash, SRAM, EEPROM được tăng gấp đôi),  chữ ký của thiết bị  khác nhau.

Phiên bản mới của AVR-GCC đã hỗ trợ '4313 do đónó tương đốiđơn giản để biên dịch lại một chương trình hiện  (nói, phần mềm chomáy quét Larson) để chạy trên '4313 một số mâu thuẫn nhỏ giữa"io.h" tập tin tiêu đề cho hai chip những mâu thuẫn có thể gây rabiên dịch thất bạiVí dụtên đăng  "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ý  "WDTCR."  vậynếu bạn chạy vào một nơi AVR-GCC là nhầm lẫn sau khi chip chuyển đổibạ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ơnAvrdude không chưa hỗ trợ '4313nhưng may mắn thaybạ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ôinơi tôiuseCrosspack như AVR toolchain, tôi nhận thấy rằng tập tin / usr / local/ CrossPack-AVR / etc / avrdude.confkhối '4313 mã có thể được thêmvào ngay bên dưới các khối  '2313bạn có thể tải về mà khối mã đây (
xem dưới đây ). Vì vậymộ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