Autor Tema: Tiny bootloader  (Leído 8310 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado al9

  • PIC10
  • *
  • Mensajes: 16
Tiny bootloader
« en: 11 de Diciembre de 2009, 12:19:27 »
Hola a todos.
Estoy experimentando con el tiny bootloader, básicamente estoy cansado de sacar-programar-meter en mis proyectos... Uso un 16f876 y el CCS.

-He modificado el asm para que funcione a 16MHZ.
-Lo he programado en el PIC.
-Cargo mi SW en el pic aparentemente sin problemas.
-Tras esto el programa no va.. Leo el PIC y veo que el tiny no me esta escribiendo nada en el pic.

Alguna idea?

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Tiny bootloader
« Respuesta #1 en: 11 de Diciembre de 2009, 15:11:10 »
Que version de CCS usas y porque no usas el ejemplo de CCS?
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado septiembre_negro

  • PIC18
  • ****
  • Mensajes: 310
Re: Tiny bootloader
« Respuesta #2 en: 11 de Diciembre de 2009, 17:50:54 »
Mmm seguramente el código del bot y el código de tu aplicación se están pisando.
En la documentación de tu bot debes checar  si se carga al principio o al final de la memoria de programa y cuantos bites utiliza e indicárselo a ccs con esta instrucción

#org 0x1eaf, 0x1FFF void loader16F877A(void) {} //protect bootloader code for the 8k 16F876/7

Desconectado al9

  • PIC10
  • *
  • Mensajes: 16
Re: Tiny bootloader
« Respuesta #3 en: 11 de Diciembre de 2009, 22:30:28 »
Hola. Gracias por vuestras aportaciones.

Mi aplicación ocupa la memoria del pic empezando por el principio y dejando suficiente espacio para el bootloader que se carga en el final, de todas maneras me parece interesante que en el CCS se reserve memoria para el.

El bot este no esta muy bien documentado, tiene la ventaja eso si que es pequeño.

He probado de cargar un programilla a modo de ejemplo (ya viene .hex) y no consigo que se escriba tampoco, solo he visto que los datos de la eeprom han sido escritos con partes de codigo  :?

Lo del ejemplo del CCS no se cual es, tengo la version IDE 3.43.

Uso el MPLAB para compliar el bootloader en asembler, creo que lo estoy haciendo bien.

Saludos.

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Tiny bootloader
« Respuesta #4 en: 12 de Diciembre de 2009, 08:18:36 »
Busca en la carpeta Examples uno que se llama bootloader.c
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado septiembre_negro

  • PIC18
  • ****
  • Mensajes: 310
Re: Tiny bootloader
« Respuesta #5 en: 12 de Diciembre de 2009, 16:15:04 »
Pues mis primeras pruebas las realice con el Tiny bootloader y nunca logre que funcionara.
El bott del ccs va bien pero al final me quede con el microcode loader. El programa es mas completo puedes leer y verificar el programa y jalo ala primera además de que la lista de dispositivos soportados es mas completo.

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Tiny bootloader
« Respuesta #6 en: 12 de Diciembre de 2009, 16:48:10 »

Yo probe el Tiny bootloader en un pic18f252 y no tuve problemas , un pokito xD al usar el puerto serie , tenia problemas con los delyas y esas cosas usando el CCS.

Probare el otro boot que comentas para mis plaquitas cn el invencible 16f88 xD

Desconectado septiembre_negro

  • PIC18
  • ****
  • Mensajes: 310
Re: Tiny bootloader
« Respuesta #7 en: 12 de Diciembre de 2009, 17:15:49 »
hola

Algo que olvide mencionar es que el bot que comento esta integrado dentro del ide de proton(pic Basic plus).
Lo que tiene el pequeño inconveniente que hay que tener abierto el pic Basic para poder utilizar el bot. Lo cual a mí no me representa ningún problema por que utilizo pic Basic y ccs.
Pero para alguien que solo utiliza ccs no se que tan practico le resulte este detalle.
Aunque también cabe la posibilidad de conseguir el bot loeder por separado.


Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Tiny bootloader
« Respuesta #8 en: 12 de Diciembre de 2009, 17:43:43 »

Pues me cae mal eso xD

No uso proton ni lo tengo , en tiempo libre probare el tinyboot para el 16f88,como no tengo uerto serial :( metengo que esperar a que desocupen la desktop.

saludos!

Desconectado al9

  • PIC10
  • *
  • Mensajes: 16
Re: Tiny bootloader
« Respuesta #9 en: 12 de Diciembre de 2009, 18:22:01 »
Hola.
A base de desensamblar un HEX que venia como ejemplo parece que he resuelto el problema  :-/
Hay unas lineas del bootloader que hay que comentar para el 16f876A.

Pongo el cofigo si a algien le interesa:

Código: [Seleccionar]
; modifications suggested by Jacques Moulin for the 16F873/74
; MODIFICADO para 16f876A 16mhz by AMM

radix DEC
LIST      P=16F876A, F=INHX8M ; change also: Configure->SelectDevice from Mplab
xtal EQU 16000000 ; you may also want to change: _HS_OSC _XT_OSC
baud EQU 115200 ; standard TinyBld baud rates: 115200 or 19200
; The above 3 lines can be changed and buid a bootloader for the desired frequency and PIC type

;********************************************************************
;Modifications made after:
; Tiny Bootloader 16FxxxA series Size=100words
; claudiu.chiculita@ugal.ro
;This should work for 16F873
;********************************************************************

#include "icdpictypes.inc" ;takes care of: #include "p16fxxxA.inc",  max_flash, IdTypePIC
#include "spbrgselect.inc"
#include "bankswitch.inc"
#define prima_adresa max_flash-100 ; 100 word in size

__CONFIG  _HS_OSC & _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _LVP_OFF & _DEBUG_OFF

errorlevel 1, -305 ; suppress warning msg that takes f as default


cblock 0x20
buffer:80
endc

cblock 0x78
crc
contor
i
cnt1
cnt2
cnt3
flag
endc


SendL macro car
movlw car
movwf TXREG
endm

;0000000000000000000000000 RESET 00000000000000000000000000

ORG     0x0000
PAGESEL IntrareBootloader
GOTO    IntrareBootloader

;&&&&&&&&&&&&&&&&&&&&&&&   START     &&&&&&&&&&&&&&&&&
;----------------------  Bootloader  ----------------------
;               
;PC_flash: C1h AddrH  AddrL  nr  ...(DataLo DataHi)...  crc
;PIC_response: id   K K


ORG prima_adresa
nop
nop
nop
nop
org prima_adresa+4
IntrareBootloader
;init serial port
clrf STATUS
bsf STATUS,RP0 ;BANK1_
movlw b'00100100'
movwf TXSTA
movlw spbrg_value
movwf SPBRG
BANK0_
movlw b'10010000'
movwf RCSTA
;wait for computer
call Receive
sublw 0xC1 ;Expect C1
skpz
goto way_to_exit
SendL IdTypePIC ;PIC type
;SendL IdSoftVer ;firmware ver x
MainLoop
clrf STATUS ;bank0
SendL 'K'
mainl
clrf crc
call Receive ;H ;*********** CALL RECEIVE
bsf STATUS,RP1 ;bank2
movwf EEADRH
movwf flag ;used to detect if is eeprom
;CAMBIOS PARA QUE FUNCIONE 16F876A
;bsf STATUS,RP0     ; added for 16F873/4
;movwf flag ;
;FIN CAMBIOS
call Receive ;L  ;*********** CALL RECEIVE
bsf STATUS,RP1 ;bank2
movwf EEADR

call Receive ;count   *********** CALL RECEIVE
movwf contor
movwf i
incf i
movlw buffer-1
movwf FSR
rcvoct
call Receive ;*********** CALL RECEIVE
incf FSR
movwf INDF
decfsz i
goto rcvoct

movf crc,f ;check crc
skpz
goto ziieroare
;write
bsf STATUS,RP1 ;bank switch 0->2
movlw buffer
movwf FSR
writeloop ; write 2 bytes = 1 instruction
clrwdt
movf INDF,w
movwf EEDATA
incf FSR
movf INDF,w
movwf EEDATH
incf FSR
BANK3_ ;bank  2->3
bcf EECON1,EEPGD
;CAMBIOS PARA QUE FUNCIONE 16F876A
;btfsc flag,6 ;only FLASH write (no more eeprom write)
btfss flag,6 ;only FLASH write (no more eeprom write)
bsf EECON1,EEPGD   
;FIN CAMBIOS
bsf EECON1,WREN
movlw 0x55
movwf EECON2
movlw 0xaa
movwf EECON2
bsf EECON1,WR
nop
nop
waitwre
btfsc EECON1,WR ;for eeprom writes (wait to finish write)
goto waitwre
bcf EECON1,WREN
BANK2_ ;bank2
incf EEADR ;does not cross zones
btfss flag,6 ; if writing to EEPROM, skip first counter dec.
decf contor
decfsz contor
goto writeloop

goto MainLoop
ziieroare
SendL 'N'
goto mainl
 

Receive
clrf STATUS
movlw xtal/2000000+1 ; for 20MHz => 11 => 1second
movwf cnt1
rpt2
clrf cnt2
rpt3
clrf cnt3
rptc
btfss PIR1,RCIF ;test RX
goto $+4
movf RCREG,w ;return in W
addwf crc,f ;compute crc
return
clrwdt
decfsz cnt3
goto rptc
decfsz cnt2
goto rpt3
decfsz cnt1
goto rpt2
;timeout:
way_to_exit ;exit in all other cases; must be BANK0/1
;BANK0_
bcf RCSTA, SPEN ; deactivate UART
goto prima_adresa
;*************************************************************
; After reset
; Do not expect the memory to be zero,
; Do not expect registers to be initialised like in catalog.

            END


Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Tiny bootloader
« Respuesta #10 en: 12 de Diciembre de 2009, 19:48:48 »
básicamente estoy cansado de sacar-programar-meter en mis proyectos... Uso un 16f876 y el CCS.
Y no vendría ver programar en circuito? ICSP
.

Desconectado al9

  • PIC10
  • *
  • Mensajes: 16
Re: Tiny bootloader
« Respuesta #11 en: 13 de Diciembre de 2009, 13:20:46 »
básicamente estoy cansado de sacar-programar-meter en mis proyectos... Uso un 16f876 y el CCS.
Y no vendría ver programar en circuito? ICSP

Como funciona eso?

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Tiny bootloader
« Respuesta #12 en: 13 de Diciembre de 2009, 13:38:53 »
armas un pequeño cableado en tu proto o placa para comunicar directamente tu miro al grabador y no hace falta que saques el micro de la placa o proto.

El único esquema ICSP que conozco está en las hojas de ayuda de microchip.

Dependiendo a tu grabador el ICSP va muy bien.

.

Desconectado septiembre_negro

  • PIC18
  • ****
  • Mensajes: 310
Re: Tiny bootloader
« Respuesta #13 en: 13 de Diciembre de 2009, 19:32:59 »
hola

Dejando por un momento de lado las ventajas que tiene utilizar el modo icsp(borrar, leer, grabar, verificar, setear los bit de configuración, y lo mas importante que en este modo no hay pic que se resista a ser gravado siempre y cuando sea soportado por el sof del grabador)la realidad es que este modo me arto ya que en la placa hay que considerar líneas del bus (data,clock,vpp,gnd) a de mas que rb6 y rb7 requieren atención especial en tu aplicación ya que estos pin son los que cuando el mclr recibe los 12v funcionan como data y clock  y si no tienes cuidado puede afectar el funcionamiento del cto.
En cambio en el modo bott si tu aplicación ya tiene considerada la comunicación serie ya esta echo es de lo mas cómodo sobre todo cuando de depurar se trata.
Solo tienes que utilizar un programador por única ves para gravar el bot en el pic lo cual para mi es una bendición ya que no tengo un programador profesional y siempre tuve problemas con este  y eso que me arme varios seriales y paralelos.
En conclusión desde que utilizo el bot el asunto de gravar ha dejado de ser un dolor de cabeza.
saludos

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Tiny bootloader
« Respuesta #14 en: 15 de Diciembre de 2009, 11:30:32 »
Totalmente de acuerdo

Pero creo que siempre hay pros y contras.

Por ejemplo un contra del boot es que tienes un sector "intocable" y no puedes disponer de todo el espacio de flash del micro. De igual son 2 pines que se usarán solo para tx y rx, si no usas en el programa esos pines y solo servirán para el bootloarder también tendrás que tener cuidado si quieres usar todo el puerto C por ejemplo, en los micros que tienen el tx y rx en ese puerto

Y bueno si el ICSP tiene varias desventajas seguramente, pero ya uno es el que analiza que le conviene y que es lo mejor para su aplicación o aplicaciones.

saludos.
.