INICIO   Otros temas


hc9s12ne64 y gcc

Autor: Fernando Rafael Filipuzzi

E-mail: fernando_6867@yahoo.com.ar




  1. Introducción

    A continuación expongo un programa sencillo que es un secuencial, lo que hace es escribir 0xff y luego de un tiempo 0x00 en el puerto B. Se anexan los fuentes según como se tenga instalado el ToolChain, iré agregando cosas y corrigiendo los errores a medida que tenga tiempo.


  2. Instalación - Binarios

    Los datos del sistema donde se instaló son:

    Linux hp 2.6.30-2-686 #1 SMP Fri Dec 4 00:53:20 UTC 2009 i686 GNU/Linux
    Debian 5.0 Lenny
    


  3. Secuencial


  4. Fichero del Enlazador o Linker

    Otro fichero es el memory.x utilizado por el enlazador o linker.
    	OUTPUT_FORMAT("elf32-m68hc12", "elf32-m68hc12",
    		    "elf32-m68hc12")
    	OUTPUT_ARCH(m68hc12)
    	ENTRY(_start)
    	SEARCH_DIR("/usr/local/lib/gcc-lib/m6812-elf/3.3.5-m68hc1x-20050515/m68hc11/mshort")
    
    	MEMORY
    	{
    	  ioports (!x)  : org = 0x0000, l = 0x0400
    	  eeprom  (!i)  : org = 0x, l = 0x
    	  data    (rwx) : org = 0x0400, l = 0x1c00
    	  text    (rx)  : org = 0x4000, l = 0x4000
    	  vectors (rx)  : org = 0xFF80, l = 0x0080
    	}
    
    	PROVIDE (_stack = 0x1bff);
    
    	vectors_addr = 0xFF80;
    
    es importante verificar que exista el camino del directorio "/usr/local/lib/gcc-lib/m6812-elf/3.3.5-m68hc1x-20050515/m68hc11/mshort".

  5. Compilando y grabando

    	OC = /usr/local/bin/m6812-elf-objcopy
    	CC = /usr/local/bin/m6812-elf-gcc
    	RM = /bin/rm
    
    	CFLAGS  = -v -m68hcs12 -mshort -mrelax -fsigned-char \
    						-fno-ident -fno-common -fomit-frame-pointer \
    						-Os -Wall
    	#					-g       comentar -Os -Wall   
    	LDFLAGS = -Wl,-u,-mm68hc12elfb
    	OCFLAGS = -O srec
    
    	CSRCS=main.c
    	ASRCS=mc9s12ne_vectors.s
    
    	OBJS=$(CSRCS:.c=.o)
    	AOBJS=mc9s12ne_vectors.o
    
    	all: main.elf main.s19
    
    	download: 
    		stty -F /dev/ttyUSB0 raw 112500
    		hcs12mem -i podex-25 -p /dev/ttyUSB0 \
    		-o 25MHz -b 115200 -t mc9s12ne64 --read-flash copia.s19
    
    	load: 
    		stty -F /dev/ttyUSB0 raw 112500
    		hcs12mem -i podex-25 -p /dev/ttyUSB0  -o 25MHz -b 115200 -t mc9s12ne64 -E -H main.s19 
    
    	$(OBJS): %.o: %.c
    		$(CC) $(CFLAGS) -c $<
    
    	main.elf:	$(OBJS)
    		$(CC) $(CFLAGS) $(LDFLAGS) -o main.elf $(OBJS) $(ASRCS) -lgcc -lc
    
    	main.s19: main.elf
    		$(OC) $(OCFLAGS) main.elf main.s19
    
    	clean:
    		$(RM) -f *.elf
    		$(RM) -f *.s19
    		$(RM) -f *.dmp
    		$(RM) -f $(OBJS) $(AOBJS)
    
    el nombre del fichero makefile se le denomina por defecto makefile, sino se hizo así luego al construir se debe especificar el nombre de este con la opción -f, por ejemplo:
    	usuario@host:~/proyectos/secuencial$make -f nombre_del_fichero_makefile all
    

  6. Escribiendo y leyendo la flash con HCS12MEM

    Es muy común que no este el puerto serie incluido en las PCs entonces hay que usar algún adaptador usb-rs232 para lo que en Debian el dispositivo es llamado "/dev/ttyUSB0".


  7. Descargas los fuentes del ejemplo

    Cuando tenga más tiempo veo como puedo hacer para que se genere automaticamente el makefile según el sistema en que ejecuta, por ahora tengo lo siguiente:

  8. Problemas

    • error: BDM active wait timed out
      	host:/home/usuario/proyectos/secuencial# hcs12mem -f -i podex-25 -p /dev/ttyUSB0 \
      	-o 25MHz -b 115200 -t mc9s12ne64 -EH main.s19
      	
      	hcs12mem: Freescale S12 MCU memory loader V1.4.1 (C) 
      	2005-2007 Michal Konieczny 
      
      	target info 
      	target mcu  family  osc <25.000000 MHz>
      	BDM12POD serial port  baud rate <115200 bps>
      	BDM12POD version <4.7 +MODA/MODB>
      	BDM12POD E-clock <12.500000 MHz> trace delay <0 ms> reset delay <1 ms>
      	BDM status  clock 
      	S12 part id <0x8201> family  memory <64kB> mask <0.1>
      	S12 part security  backdoor key 
      	S12 register space <1kB> address range <0x0000-0x03FF>
      	S12 RAM size <8kB> space <8kB> align  address range <0x2000-0x3FFF>
      	S12 EEPROM not present
      	S12 FLASH module  state  ROMHM 
      	S12 FLASH size <64kB> space <48kB> off-chip/on-chip space <876kB/128kB>
      	S12 FLASH protection all  high area  low area 
      
      	FLASH erase: memory erased, time <11 ms>
      	RAM load: agent file 
      	RAM load: address range <0x3C00-0x3E85> length <0x0286> entry <0x3D0A>
      	RAM load: data [##################################################]
      
      	error: BDM active wait timed out	
      
    • error: FLASH protection violation (PVIOL bit set)
      	host:/home/usuario/proyectos/secuencial# hcs12mem -E -i podex-25 \
      	-p /dev/ttyUSB0  -o 25MHz -b 115200 -f -t mc9s12ne64 -H main.s19
      	
      	hcs12mem: Freescale S12 MCU memory loader V1.4.1 (C) 
      	2005-2007 Michal Konieczny 
      
      	target info 
      	target mcu  family  osc <25.000000 MHz>
      	BDM12POD serial port  baud rate <115200 bps>
      	BDM12POD version <4.7 +MODA/MODB>
      	BDM12POD E-clock <12.500000 MHz> trace delay <0 ms> reset delay <1 ms>
      	BDM status  clock 
      	S12 part id <0x8201> family  memory <64kB> mask <0.1>
      	S12 part security  backdoor key 
      	S12 register space <2kB> address range <0x7800-0x7FFF>
      	S12 RAM size <8kB> space <16kB> align  address range <0x0000-0x1FFF>
      	S12 EEPROM not present
      	S12 FLASH module  state  ROMHM 
      	S12 FLASH size <64kB> space <64kB> off-chip/on-chip space <0kB/1MB>
      	S12 FLASH protection all  high area  low area 
      
      
      	error: FLASH protection violation (PVIOL bit set)
      
    • error: FLASH access error (ACCERR bit set)
      	host:/home/usuario/proyectos/secuencial# hcs12mem -f -i podex-25 -p /dev/ttyUSB0 \
      	-o 25MHz -b 115200 -t mc9s12ne64 -H main.s19
      	
      	hcs12mem: Freescale S12 MCU memory loader V1.4.1 (C) 
      	2005-2007 Michal Konieczny 
      
      	target info 
      	target mcu  family  osc <25.000000 MHz>
      	BDM12POD serial port  baud rate <115200 bps>
      	BDM12POD version <4.7 +MODA/MODB>
      	BDM12POD E-clock <12.500000 MHz> trace delay <0 ms> reset delay <1 ms>
      	BDM status  clock 
      	S12 part id <0x8201> family  memory <64kB> mask <0.1>
      	S12 part security  backdoor key 
      	S12 register space <1kB> address range <0x7800-0x7BFF>
      	S12 RAM size <8kB> space <8kB> align  address range <0x2000-0x3FFF>
      	S12 EEPROM not present
      	S12 FLASH module  state  ROMHM 
      	S12 FLASH size <64kB> space <48kB> off-chip/on-chip space <876kB/128kB>
      	S12 FLASH protection all  high area  low area 
      
      	FLASH write: image file 
      	FLASH write: image info  entry <0x4000>
      	FLASH write: address range <0x4000-0x406F> size <0x0070>
      	FLASH write: address range <0xFF80-0xFFFF> size <0x0080>
      	FLASH write: image [                                                  ]
      	error: FLASH access error (ACCERR bit set)
      
    • Lo que hay que verificar es que esté bien configurado el puerto serie, puede depender de los drivers para el caso de un adaptador usb-rs232 y que con lo siguiente no se configure este:

      	host:/home/usuario/proyectos/secuencial# stty -F /dev/ttyUSB0
      		speed 115200 baud; line = 0;
      		eof = ^A; min = 1; time = 0;
      		-brkint -icrnl -imaxbel
      		-opost -onlcr
      		-isig -icanon -iexten -echo -echoe -echok -echoctl -echoke
      	host:/home/usuario/proyectos/secuencial#stty -F /dev/ttyUSB0 raw 112500
      
      
      en windows eso se configura desde el administrador de dispositivos:
      	Descripción: Prolific USB-to-Serial Comm Port(COM3) 
      	Bits por segundo: 115200
      	Bits de datos: 8 
      	Paridad: Ninguno
      	Bits de parada: 1
      	Control de flujo: Ninguno
      
      luego con esto pude grabar bien la flash con hcs12mem.

      Otra cosa también es que no se tenga permisos sobre el fichero /dev/ttyUSB0, basta con ejecutar hcs12mem como root.

      Si estas dos cosas no son, habria que probar comentar con # la línea que dice: "bdm_flash_write agent" del fichero llamado "/usr/local/share/hcs12mem/mc9s12ne64.dat".


  9. Enlaces y referencias

    1. Enlaces y referencias


INICIO   Otros temas