Можно ли скомпилировать программу и прошить AT89s51 через AVR ISP?

basilblinov
Offline
Зарегистрирован: 02.06.2013

Есть устройство основанное на ATmega8515. Но МК дороговатый. Решил перейти на AT89s51. Функционально он такой же. Пока не знаю заказывать их или нет. Может кто сталкивался... Arduino ISP прошьёт его или нет? Пользуюсь CODEvision и Arduino. Стремает что цепь сброса на 89й серии инвертна ATmega. Или может не стоит и связываться с 89ой серией?

SatBoom
Offline
Зарегистрирован: 16.02.2014

Вот пример:

http://www.nipahut.com.ph/proj_avr1_frm.html

Можно так же добавить секцию по данному контролеру в avrdude.conf и board.txt, указав соответствующие сигнатуры и фьюзы.

Ардуино использует avrdude для программирования так что если правильно изменить конфиг то проблемы не должно быть. Вроде данный чип уже есть в конфиге.

вот код для avrdude.conf

Code:
#define AT89START   0xE0 
#define AT89S51     0xE0 
#define AT89S52     0xE1



добавить в конец файла

Code:
 #------------------------------------------------------------ 
  # AT89S51 
  #------------------------------------------------------------ 
  part 
      id               = "8052"; 
      desc             = "AT89S51"; 
      signature        = 0x1E 0x51 0x06; 
      chip_erase_delay = 500000; 
      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      = 0; 
  
      memory "flash" 
          size            = 4096; 
          paged           = no; 
          min_write_delay = 4000; 
          max_write_delay = 9000; 
          readback_p1     = 0xff; 
          readback_p2     = 0xff; 
          read            = "  0   0   1   0    0   0   0   0", 
                            "  x   x   x a12  a11 a10  a9  a8", 
                            " a7  a6  a5  a4   a3  a2  a1  a0", 
                            "  o   o   o   o    o   o   o   o"; 
  
          write           = "  0   1   0   0    0   0   0   0", 
                            "  x   x   x a12  a11 a10  a9  a8", 
                            " a7  a6  a5  a4   a3  a2  a1  a0", 
                            "  i   i   i   i    i   i   i   i"; 
     mode      = 0x21; 
     delay      = 12; 
        ; 
  
      memory "signature" 
          size            = 3; 
          read            = "0  0  1  0   1  0  0  0   x  x  x  0   0  0 a1 a0", 
                            "0  0  0  0   0  0  0  0   o  o  o  o   o  o  o  o"; 
        ; 
    ; 
#------------------------------------------------------------
# AT89S52 
#------------------------------------------------------------
part 
    id               = "8052"; 
    desc             = "AT89S52"; 
    signature        = 0x1E 0x52 0x06; 
    chip_erase_delay = 500000; 
    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      = 0; 

    memory "flash" 
        size            = 8192; 
        paged           = no; 
        min_write_delay = 4000; 
        max_write_delay = 9000; 
        readback_p1     = 0xff; 
        readback_p2     = 0xff; 
        read            = "  0   0   1   0    0   0   0   0",
                          "  x   x   x a12  a11 a10  a9  a8",
                          " a7  a6  a5  a4   a3  a2  a1  a0",
                          "  o   o   o   o    o   o   o   o";

        write           = "  0   1   0   0    0   0   0   0",
                          "  x   x   x a12  a11 a10  a9  a8",
                          " a7  a6  a5  a4   a3  a2  a1  a0",
                          "  i   i   i   i    i   i   i   i";
   mode      = 0x21; 
   delay      = 12; 
      ; 

    memory "signature" 
        size            = 3; 
        read            = "0  0  1  0   1  0  0  0   x  x  x  0   0  0 a1 a0", 
                          "0  0  0  0   0  0  0  0   o  o  o  o   o  o  o  o"; 
      ; 
  ; 
#------------------------------------------------------------
# AT89S8253 
#------------------------------------------------------------
part 
    id               = "8253"; 
    desc             = "AT89S8253"; 
    chip_erase_delay = 20000; 
    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      = 0; 

    memory "flash" 
        size            = 12288; 
        paged           = no; 
        min_write_delay = 4000; 
        max_write_delay = 9000; 
        readback_p1     = 0xff; 
        readback_p2     = 0xff; 
        read            = "  0   0   1   0    0   0   0   0",
                          "  x   x a13 a12  a11 a10  a9  a8",
                          " a7  a6  a5  a4   a3  a2  a1  a0",
                          "  o   o   o   o    o   o   o   o";

        write           = "  0   1   0   0    0   0   0   0",
                          "  x   x a13 a12  a11 a10  a9  a8",
                          " a7  a6  a5  a4   a3  a2  a1  a0",
                          "  i   i   i   i    i   i   i   i";
   mode      = 0x21; 
   delay      = 12; 
      ; 

    memory "signature" 
        size            = 2; 
        readback_p1     = 0x1E; 
        readback_p2     = 0x73; 
        read            = "0  0  1  0   1  0  0  0   x  x  x  x   x  x  x  x", 
                          "x  x  1  1   0  0  0 a0   o  o  o  o   o  o  o  o"; 
      ; 
  ;

Для запуска прошивки в Ардуина нужно содать в файле board.txt вашу МК по аналоги как для других МК.

Загрузить скетч прогромматора, выбрать далее вашу плату т.е ваш МК.

Далее подменить фаил загрузчика на вашу прошивку для данного МК и запустить в Ардуино запись загрузчика. 

 

Код для запуска с USBASP

Code:
avrdude -c usbasp -p AT89S52 -C avrdude.conf -B 250 -e -U flash:w:file.hex