Autor Tema: Empezando con AVR  (Leído 90637 veces)

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

Desconectado Belgitaes

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 215
Re: Empezando con AVR
« Respuesta #45 en: 27 de Septiembre de 2009, 02:59:40 »
Código: [Seleccionar]

Seguiré buscando algo de info para ver si se puede colocar
algún comando dentro del mismo código .asm


Cuando Preguntabas Algun Comando En El Codigo Asm
Lo Entendi De Esta Manera Me Explico:
Se Supone Que El Codigo Que Vayas A Escribir En Asm Quieres Protegerlos de Forma De Que Nadie
A La Hora De Leer El Micro Pueda Ver Lo Que Hay Dentro Una Vez Actualizado El Micro En Su Totalidad
Pues Me Referia A Los Bits De Bloqueo De Programacion Y De Datos
Es Decir En Proteger El Codigo Asm

Bloqueo De Programacion Y De Los Datos:
Segun El DATASHEET Atmega88 
Program Flash memory space is divided in two sections, the Boot Program section and the
Application Program section. Both sections have dedicated Lock bits for write and read/write
protection. The SPM instruction that writes into the Application Flash memory section must
reside in the Boot Program section.
Código: [Seleccionar]
La Memoria Del Programa Se Divide En 2 Secciones
  ............ = 0x0000
  .          .
  .          .
  .          . 
  .          .
  .          .  Organizacion De La Memoria
  .          . 
  .          .  La Parte Alta Contiene El Codigo Del BootLoader(Boot Program section)
  .          .
  .          .
  .          .
  .        .
  .      .   .
  .    .   . .
  .  .   .   .
  ..   .     .
     .       .  La Parte Baja Contiene El Codigo De La Aplicacion (Application Program section)
  ..         .     
  .          .
  .          .
  ............

Entre Ambas Secciones Se Han Dedicado Unos Bits De Bloqueo Para La Escritura Y Para La Lectura / Escritura

Los Atmegas Poseen 6 Bits De Seguridad Para Proteger A La Memoria Independientemente De Los Bits De Fusibles
 
Que Estos Si Se Gravan A Traves Un Software
Bits De Programacion:
Bit Low
-CKDIV-CKOUT-SUT1-SUT0-CKSEL3-CKSEL2-CKSEL1-CKSEL0

Bit High:
RSTDISBL- -DWEN-SPIEN-WDTON-EESAVE-BODLEVEL2-BODLEVEL1-BODLEVEL0

Extended Bits :
BOOTSZ1-BOOTSZ0-BOOTRST


..................
BLB12  .  BLB11  .
..................6 Bits De Seguridad Para Proteger A La Memoria
BLB02  .  BLB01  .
..................
LB2  .  LB1  .
..............

Vienen Desde La Fabrica Sin Programar Todos En (1) Logico
Tambien Se Quedan Sin Programar Cuando Se Envia El Commando De Borrar
Lock Bit Byte(1)

..................
BLB12  .  BLB11  . Sin Restriciones En Las Instruciones SPM o LPM Para El Acceso A La Seccion Del BootLoader
..................
BLB02  .  BLB01  . Sin Restriciones En Las Instruciones SPM o LPM Para El Acceso A La Seccion De La Aplicacion
..................
LB2  .  LB1  ..    Sin Habilitar La Protecion De La Memoria
..............

La Parte Baja De La Memoria Contiene El Codigo De La Aplicacion Esta Protegida Por Los Bits BL0
La Parte Alta De La Memoria Contiene El Codigo Del BootLoader Esta Protegida Por Los Bits BL1


Es Decir Suponemos Que Quiero Hacer Un Codigo Que Actualize Despues Y Que Tu No Pueda Leer
Entonce Lo Primero Que Hago Es Gravar Mi Codigo En La Parte Baja De la Memoria

Ahora Una Vez Gravado El Codigo
Y Como Lo Voy A Gravar En La Parte Baja De La Memoria
La Instrucion SPM Es La Que Escribe En La Seccion De Aplicacion Es Decir En La Seccion Del Programa De Arranque
;Boot Reset Address (Start BootLoader Section) 0xC00
;No Read-While-Write section = (NRWW)
;Significa Que No Se Podra Leer Si Se Escribe En Esta Seccion ;Direciones Desde  0xC00 - 0xFFF
;Como Esta Zona Esta Protegida Por Los Bits BL0 Habra Que Acudir
;A Las Direciones De La Memoria Desde  0x000 - 0xBFF Para Poder Leer El Firmware Una Vez Actualizado

RJMP ; 0C00 ;RESET ;Principio De La Alimentacion
; Aqui Comienza El Programa
Una Vez Gravado El Code
Programo Mis Bits De Programacion Que Estos Si Se Gravan A Traves Un Software
Bits De Programacion:
Cuando El Bit BOOTRST Esta Programado El Dispositivo Saltara A La Direccion BootLoader Flash Seccion =  0C00 - 0FFF
Y Cpmo Mi Code Empieza En Esta Parte Pues Lo Configuro Asi Mas Las Demas Configuraciones Segun El Metodo Empleado







Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Empezando con AVR
« Respuesta #46 en: 27 de Septiembre de 2009, 14:41:54 »
Hola Belgitaes, nuevamente gracias por pasarte a explicarme tantas cosas

Te explico un poco:
los micros pic de microchip, también tienen fuses, se les llama así o palabra de configuración (CONFIG WORD) en esta se establecen similares formas de trabajo como en los AVR, estás son el cristal, el power on, el watch dog, proteccion de flash contra lecturas, protección de eeprom contra lecturas, etc, etc.

cuando se programa en ASM o C, se puede configurar estos fuses mediante líneas de código en el .asm o .c, por ejemplo en ASM se hace así:

__CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF & _WRT_ENABLE_OFF & _LVP_OFF & _BODEN_ON
ó se puede colocar el equivalente en hexadecimal: __CONFIG 0x3f71

en C de CCS se hace:
#fuses XT,NOWDT,PUT,NOPROTECT,NOLVP,BROWNOUT

y al compilar el programa esto está guardado dentro del .hex, y al momento de grabar no hace falta más nada que cargar el .hex al soft y grabarlo al micro, y funciona como debería, a la frecuencia programada, con o sin WDT, etc, etc.

Mi pregunta iba apuntando a ello, si es que habían líneas de programación en el .asm o .c que hagan que los fuses se queden dentro del .hex para los AVR. Me parece que no es posible por tus comentarios
Los Atmegas Poseen 6 Bits De Seguridad Para Proteger A La Memoria Independientemente De Los Bits De Fusibles
 
Que Estos Si Se Gravan A Traves Un Software

La Parte Alta De La Memoria Contiene El Codigo Del BootLoader Esta Protegida Por Los Bits BL1

No quiero proteger ningún código todavía, y entendiendo que los Lock bits, sirven para ello. Lo que busco es "meter" dentro del .hex la configuración de los fuses. Para cargar el .hex en el soft de grabación y grabarlo en el micro directamente, sin tener que preocuparse por todavía tener que configurar los fuses en el soft para recién grabarlos.

saludos.
.

Desconectado Belgitaes

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 215
Re: Empezando con AVR
« Respuesta #47 en: 29 de Septiembre de 2009, 03:31:19 »
Código: [Seleccionar]

cuando se programa en ASM o C,
se puede configurar estos fuses mediante líneas de código en el .asm o .c,
por ejemplo en ASM se hace así:

__CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF & _WRT_ENABLE_OFF & _LVP_OFF & _BODEN_ON
ó se puede colocar el equivalente en hexadecimal: __CONFIG 0x3f71

similares formas de trabajo como en los AVR,
estás son el cristal, el power on, el watch dog,
proteccion de flash contra lecturas,
protección de eeprom contra lecturas, etc, etc.

Bit de configuración (Fuse Bits)
Los Fuse Bit Son Un Sistema De Configuracion De Muy Bajo Nivel
Activando O Borrando Estos Bits Puedes Cambiar Completamente Las
Funciones Del AVR

El Atmega Da Varias Opciones De Generar Un Ritmo Para El Micro Sin Tener Que Acudir A Los (Fuse Bits)

El Oscilador Externo Es Usado De Forma Estandar
El ATMega Viene Configurado Con Un Oscilador Interno De 1MHz
Lo Podemos Presionar A Ser Mas Rapido Configurando Para Que Corra
Con Un Cristal Externo   
Connectando Un Cristal De Cuarzo A Los Pines TOSC El Codigo Se Ejecutara A La Frecuencia Deseada
A Traves De La Uart
Por Ejemplo Si Necesitas Lograr 9600Bps En Comunicacion Serial
 
;Reloj Externo = XCK = Reloj De Transferencia
;La Entrada Del Reloj Externo Pin XCK Es La Muestra De Un Registro De Sincronizacion
Esto Seria Un Ejemplo En El Atmega88
 
Código: [Seleccionar]

;---------------------------------------------------------
; Configuro La Uart Para 9600 Bauds Con Un Cristal De 4 Mhz
;----------------------------------------------------------
                   ;\  Para fijar la velocidad tienes que pasar un valor a UBRR
                   ; | Inicialisation Uart 9600 BDS Quartz
   ; | 9600*16 = 153.600
   ; | 4.000.000 / 153600)= 26,04 Decimal -1 = 25.04 Decimal
                   ; | 25 Decimal = 19 Hexadecimal
   ; | UBRR = (frecuencia cristal/(16 * baudrate)) - 1 
LDI     R16,0x19   ; | UBRR = 25 Decimal= 19 Hexadecimal
STS     UBRR0L,R16 ; /
;..........................................................
;UCSR0B: USART Control and Status Register B

;RXEN: Este Bit Debe De Estar A 1 Para validar El Funcionamiento De La UART En Modo Recepcion
; En Este Caso El Pin Del Puerto PD0 Es Compartido Con La Entrada De Datos

;|-------|-------|------|-----|-----|------|-----|-----|
;|RXCIE0 |TXCIE0 |UDRIE0|RXEN0|TXEN0|UCSZ02|RXB80|RXB80|
;|-------|-------|------|-----|-----|------|-----|-----|
;   0       0       0     1      1     0      0     0     LDI  R16,0x18



 LDI     R16,0x18         ; Transmision Activada Bit3 TXEN0 Y/Recepcion Activada Bit 4 RXEN0 En UCSR0B 
 STS     UCSR0B,R16       ; UCSR0B 
;.............................................................................   

Con El Watchdog Pasa Lo Mismo Se Puede Configurar A Traves El Code Asm Sin Tener Que Acudir A Los (Fuse Bits)
Con La EEprom Pasa Lo Mismo
Los Bits De Configuracion De Los Pics Los Programa Directamente En Tu Codigo Sin Problemas
Los AVR Son Muy Diferentes Si Programa Mal Tus Bits De Configuracion Puedes Estropearlo

Saludo Y Suerte 





               

Desconectado stk500

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4923
Re: Empezando con AVR
« Respuesta #48 en: 29 de Septiembre de 2009, 05:56:01 »
Perdona Belgitas pero eso no tiene nada que ver con los Fuses, hasta ahora cuando programa un atmel en bascom debo configurar los Fuses en el programador, y como dije ante no conozco ningun Compilador de Atmel que compiler FUSES, sino en el Programador que uses, es todos los contrarios a los Pic.
Saludos

Edito
Aqui os dejos todos referente a programacion y 'Tutorial de Atmel tantos para Linus
http://electrons.psychogenic.com/modules/arms/sec/1/AVR/
« Última modificación: 29 de Septiembre de 2009, 06:52:31 por stk500 »

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Empezando con AVR
« Respuesta #49 en: 29 de Septiembre de 2009, 09:34:31 »
pues como decia programar  los Fuses a mano nunca lo he vistos, porque para eso ya lo hace el programador, digo yo!!


Pues he visto lo mismo , los fuses al final ,justo al momento de programar.


Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Empezando con AVR
« Respuesta #50 en: 29 de Septiembre de 2009, 10:40:11 »
Cada vez que leo un mensaje de Belgitaes me confundo más aún :(, disculpa tu Belgitaes

gracias por el link stk500, los veré :-/

Entiendo AKENA, entonces mi búsqueda será en vano, porque no encontraré tal cosa, no?

En si lo veo con ventajas y desventajas este hecho, la desventaja sería que si no sabes los fuses de un programa X, no podrás probarlo nunca o si lo hiciste tu y aquella vez de la programación si los sabías, y te olvidaste apuntarlos, ya la cagaste :D. No solo basta con que te "roben" el .hex un usuario mal intencionado, si no sabe los fuses, le tomará bastante tiempo descifrarlos, por lo que leí en los comentarios de Belgitaes, se puede proteger contra lectura a los fuses, no?

Tiene sus cosas buenas y malas....

Saludos y muchas gracias por las respuestas. Ya tengo 5 ejemplos de mi inicio, todos funcionando casi muy bien, solo quería confirmar los fuses para colocarlo, lo iré preparando entonces, y sis e peude estos días también colocaré fotos.
.

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Empezando con AVR
« Respuesta #51 en: 29 de Septiembre de 2009, 10:50:43 »
xD

Si es una c@gada xD , porque si programas tu avr con X fuses , luego pasa el tiempo , lo desarmas , quieres volver a programarlo , pero digamo ahora con otro clock u otros settings , te jodiste , porque no responde mas que con lo que marcaste al inicio , esto solo con el ISP , que es el más comun.

El que salva de todo desastre es un programador HV paralelo.

Porque si puede reprogramar todos los FUSES , cosas que ISP , en determinados fuses una vez hecho el desastre no hay marcha atras xD .

Esto te lo cuento porque puedes desactivar el ISP , osea que xD hahha watch out xD


Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Empezando con AVR
« Respuesta #52 en: 29 de Septiembre de 2009, 13:06:34 »
si ya veo...

a ver pues como se da

saludos
.

Desconectado Belgitaes

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 215
Re: Empezando con AVR
« Respuesta #53 en: 30 de Septiembre de 2009, 04:42:37 »
Me Parece Que No Me Han entendido

Un Cargador De Arranque ( Bootloader ) Es Una Parte De Sotfware Que Se Carga En La Aplicacion De La Memoria
El Gestor De Arranque En Si Se Coloca En Los Controladores De La Memoria

El Programa Cargador ( .Hex) Cargara El Programa De Datos
A Partir De Este Momento Es El Cargador El Encargado De Cargar El Programa De Aplicacion En La Memoria
Cargar - Arrancar - Iniciar

Esto se puede hacer de 2 formas distintas:

•usando AVRdude + un programador hardware
•usando AVRdude + un cargador de arranque (bootloader) previamente grabado en flash.

Esta es una pequeña utilidad de carga de programas que se hace con el control del micro después de dar un reset.
Si durante los primeros 4 segundos el host le envía un fichero de software (*.hex) a través del puerto serie
lo graba en la flash, de lo contrario, si no recibe nada del host,
transfiere el control al programa que esta actualmente grabado en flash.
 
La segunda opción es, con diferencia, la más cómoda durante la fase de desarrollo
pero exige tener grabar el cargador en memoria.
Para grabarlo es necesario un programador hardware.
el Parallel Programmer, que básicamente es un cable paralelo.

¿Qué es un fusible?
http://www.ladyada.net/learn/avr/fuses.html
Si Lo Traduce Con Google Lo Puedes Entender mejor

Desconectado stk500

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4923
Re: Empezando con AVR
« Respuesta #54 en: 30 de Septiembre de 2009, 06:23:32 »
Perdoname Belgitaes pero tampoco te sigo comprendiendo, que tiene que ver un Bootloader con los Fuses!!! el temas que puso el amigo Cryn es si se podia compilar los Fuses, como los pic, cosas que con el Atmel es imposible, ya se comento muchos de esos, conclusion los Fuses de lo Atmel se configuran cuando se programa el micro, soy novato de verdad en Atmel, pero he leido muchos Tutorial de Atmel y nunca lei de programar los Fuse como tu lo explica, pero si tu esta convencido que se puede , te ruego que me ponga un Ejemplo en Assembler o GGC que se pueda quemar en el micro y funciones.  repito soy un Novato en los Micros y estoy aqui para aprender con ustedes.
 :mrgreen:
Saludos

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Empezando con AVR
« Respuesta #55 en: 30 de Septiembre de 2009, 12:03:19 »
Hola.

Revisando los archivos de salida resultado de la compilación, no encuentro por ningún lado el .cof. Como se habilita la generación de este archivo? En la ayuda hay algo sobre los tipos de archivos soportados pero no indica que se deba hacer para que lo genere.

Saludos
El papel lo aguanta todo

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Empezando con AVR
« Respuesta #56 en: 30 de Septiembre de 2009, 12:48:34 »

Yo nunca simule paso a paso con proteus .

La simulacion fue completa usando solo HEX.

Estos son los archivos que puede generar :


Desconectado cristian_elect

  • PIC18
  • ****
  • Mensajes: 453
Re: Empezando con AVR
« Respuesta #57 en: 30 de Septiembre de 2009, 14:12:29 »
Ya hay bastante con los fuses ahora empiecen con el winavr y con sub funciones por que a mí no me sale se pierde codigo cuando es optimizado en zize.

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Empezando con AVR
« Respuesta #58 en: 30 de Septiembre de 2009, 14:16:50 »
Perdoname Belgitaes pero tampoco te sigo comprendiendo, que tiene que ver un Bootloader con los Fuses!!! el temas que puso el amigo Cryn es si se podia compilar los Fuses, como los pic, cosas que con el Atmel es imposible, ya se comento muchos de esos, conclusion los Fuses de lo Atmel se configuran cuando se programa el micro, soy novato de verdad en Atmel, pero he leido muchos Tutorial de Atmel y nunca lei de programar los Fuse como tu lo explica, pero si tu esta convencido que se puede , te ruego que me ponga un Ejemplo en Assembler o GGC que se pueda quemar en el micro y funciones.  repito soy un Novato en los Micros y estoy aqui para aprender con ustedes.
 :mrgreen:
Saludos

Coincido con stk500, creo que nuestra amigo Belgitaes o bien no nos entiende o nosotros no la entendemos.

Nuevamente quiero agracederte por las respuestas que das Belgitaes, me serán de mucha utilidad cuando vea el lado de los bootloader y todas las buenas cosas que te molestaste en explicar, que de momento no me ayudaban en lo que buscaba de los fuses...

en fin, saludos para todos! y continuar aprendiendo, solo estoy esperando por los AVR que pedí para mostrarles circuitos funcionando, espero que no la pele con los fuses :mrgreen:
.

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Empezando con AVR
« Respuesta #59 en: 30 de Septiembre de 2009, 14:22:23 »
Hola.

Revisando los archivos de salida resultado de la compilación, no encuentro por ningún lado el .cof. Como se habilita la generación de este archivo? En la ayuda hay algo sobre los tipos de archivos soportados pero no indica que se deba hacer para que lo genere.

Saludos
con que quieres compilar MLO__, con WINAVR o con AVR STUDIO, porque el 1ro es para C y el segundo para ASM aunque el 1ro se integra al AVR STUDIO, como bien ya debes saber

Personalmente estoy comenzando con ASM, y lo que te puede decir es que tiene un entorno de simulación parecida al del MPLAB, y me pareció muy buena, logre depurar varios programas y encontrar mis errores. Pienso que en C se debe poder hacer la misma simulación, todavía no vi nada de C del WINAVR.

Y si existiera una forma de depurar ya sea el asm o el c para los AVR, si alguien sabe de ello que nos lo comente
.