First, let me say that I am new to linux, so this might be a bit  
dirty, however;

I have successfully programmed the AT90CAN128, based on the mega128  
example and some
small modifications.

I am using:
- Amontech JTAGkey-tiny
- OpenOCD 0.4.0-rc1 dirty
    - libftdi
    - modified /src/flash/nor/avrf.c

1) Add the at90can128 to the list:
/src/flash/nor/avrf.c line 53:
struct avrf_type avft_chips_info[] =
{
//         name,                        chip_id,         
flash_page_size,        flash_page_num,        eeprom_page_size,        
  eeprom_page_num
         {"atmega128",        0x9702,                256,               
                   512,                        8,                       
                   512},
         {"at90can128",        0x9781,                256,              
                    512,                        8,                      
                    512},
};


2) However I still had problem erasing the chips with the command "avr  
mass_erase 0".
So I moved the "avrf_mass_erase" code (line ~400) to the "avrf_erase"  
(line ~201) in the
same file (/src/flash/nor/avrf.c):

static int avrf_erase(struct flash_bank *bank, int first, int last)
{
         LOG_INFO("HP HACKED: %s", __FUNCTION__);

         struct target *target = bank->target;
         struct avr_common *avr = target->arch_info;

         if (target->state != TARGET_HALTED)
         {
                 LOG_ERROR("Target not halted");
                 return ERROR_TARGET_NOT_HALTED;
         }

         if ((ERROR_OK != avr_jtagprg_enterprogmode(avr))
                 || (ERROR_OK != avr_jtagprg_chiperase(avr))
                 || (ERROR_OK != avr_jtagprg_leaveprogmode(avr)))
         {
                 return ERROR_FAIL;
         }

         return ERROR_OK;
}

So now the erase and programming of at90can128 is working!
I hope this might be helpful for someone else.

B.R.
Hans Peter Mortensen

--------------------------
This is the configuration:
# for avr
    set  _CHIPNAME avr
    set  _ENDIAN little
# jtag speed
jtag_khz 4500
reset_config  srst_only
jtag_nsrst_delay 100
#jtag scan chain
if { [info exists CPUTAPID ] } {
    set _CPUTAPID $CPUTAPID
} else {
    set _CPUTAPID 0x0978103F
}
jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf  
-expected-id $_CPUTAPID
set _TARGETNAME [format "%s.cpu" $_CHIPNAME]
target create $_TARGETNAME avr -endian $_ENDIAN -chain-position $_TARGETNAME

$_TARGETNAME configure -work-area-virt 0 -work-area-phys 0x20000000  
-work-area-size 16384
-work-area-backup 0
flash bank avr1.flash avr 0 0 0 0 $_TARGETNAME

#avr_program.cfg:
# default ports
telnet_port 4444
gdb_port 3333
tcl_port 6666
init
jtag_khz 4500
reset init
verify_ircapture disable
halt
wait_halt
poll
#avr mass_erase 0
flash probe 0
flash write_image erase /home/navis/test.hex
reset run
shutdown

_______________________________________________
Openocd-development mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/openocd-development

Reply via email to