Autor Tema: librerias asm para el enc28j60.con pic18Fxxxx  (Leído 22230 veces)

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

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
librerias asm para el enc28j60.con pic18Fxxxx
« en: 20 de Octubre de 2010, 10:51:59 »
hola a todos.quiero abrir este tema para realizar librerias para controlar el controlador ethernet ENC28j60.
asi que se realizaran pequeños programas que se iran implementando y asi crear las funciones necesarias para el control del ENC28j60.

uno de los primeros programas que estoy realizando para aprender a usar el ENC28j60 es la lectura de sus registros y pasarlos a una localizacion de
la memoria del pic.esto es para leer en el momento que queramos,los registros del ENC28j60 y poder analizarlos.

asi que los subire pronto.

NOTA: como lo que voy publicando son los aprendizages de mis experiencias con este controlador de ethernet.es muy posible que algunas de las respuestas.
          contengan algun error.por eso siempre que se necesite un archivo o algun codigo,dirigirse a las ultimas respuestas.ya que seran las mas actualizadas.
« Última modificación: 01 de Enero de 2011, 17:37:56 por groundman »
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado akira_ve

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 342
Re: librerias asm para el enc28j60.con pic18Fxxxx
« Respuesta #1 en: 20 de Octubre de 2010, 23:14:58 »
bueno mi pana aqui estoy para ayudar
Si conocemos bien lo que tenemos y lo sabemos usar......se haran hasta cosas que e veces aseguran son imposibles

Venezuela

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: librerias asm para el enc28j60.con pic18Fxxxx
« Respuesta #2 en: 21 de Octubre de 2010, 10:52:43 »
Código: [Seleccionar]
;***********************************REGISTROS DE CONTROL*****************************************
;

rcr bcf CS2
call transcept,0
call transcept,0
btfsc FLAGS,0 ;comprueva si los registros son (ETH) o (MAC y MII)
call transcept,0
bsf CS2
return 0


rbm movlw b'00111010' ;lectura del buffer de memoria
bcf CS2
call transcept,0
return 0

wcr addlw WCR ;escritura en el registro de control
bcf CS2
call transcept,0
movf DATO,W
call transcept,0
bsf CS2
return 0


wbm movlw b'01111010' ;escritura en el buffer de memoria
bcf CS2
call transcept,0
return 0

bfs addlw BFS ;activacion de un bit de una palabra
bcf CS2
call transcept,0
movf DATO,W
call transcept,0
bsf CS2
return 0

bfc addlw BFC ;borrado de un bit de una palabra
bcf CS2
call transcept,0
movf DATO,W
call transcept,0
bsf CS2
return 0

src movlw 0xff ;reseteo del sistema
bcf CS2
call transcept,0
bsf CS2
return 0
;************************************ Subrutina de Recepcion y Transmision de Datos ***************
transcept   bcf CS2 ; habilita chip enc28j60
movwf SSPBUF,ACCESS       ; cargar el contenido de w al registro de recepcion/transmisin de datos
lop1     btfss SSPSTAT,BF,ACCESS   ; espera a que se complete la transmision
         goto  lop1               ; si no ha terminado,espera.
         movf  SSPBUF,W,ACCESS       ; carga el contenido del registro de recepcion/transmisin de datos en w
         movwf rxdata,ACCESS         ; carga el contenido de w en rxdata
         return 0                 ; retorno de subrutina  
 
« Última modificación: 01 de Enero de 2011, 17:31:55 por groundman »
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: librerias asm para el enc28j60.con pic18Fxxxx
« Respuesta #3 en: 31 de Octubre de 2010, 11:05:30 »
por fin he terminado el simulador para leer los registros de control y registros PHY del enc28j60.

al realizar una llamada a este programa,lo que hace es copiar el contenido de los registros de control y PHY del enc 28j60.
a unas posiciones predefinidas del pic.en este caso el 18f4550.
ahora me pondre con el buffer ethernet.y cuando lo tenga todo acabado,explicare su funcionamiento.
por el momento publico lo que tengo.no vaya a que pierda los datos con el trabajo que me ha costado.
Código: [Seleccionar]
;************************************************************************************************************************************************
; LIBRERIA PARA LA VISUALIZACION DE LOS REGISTROS DE CONTROL DEL ENC28J60
;************************************************************************************************************************************************
;Este programa visualiza el estado de todos los registros del enc28j60 en el momento en que lo llamemos.
;por defecto se ha hubicado una tabla con todos los registros en la direccion 100h de la ram de datos.
;Todos los registros pueden ser escritos para posteriormente leerlos.excepto EREVID que no puede escribirse.
;por defecto se ha incluido una tabla que esta hubicada en la direccion 1050h de la eeprom de programa
;Este programa necesita del programa enc28j60.inc para las llamadas al los comandos del enc28j60

;REGISTROS A INCLUIR EN EL PROGRAMA PRINCIPAL

;registros de control del ENC28J60


CBLOCK 0X100
REG_ERDPTL
REG_ERDPTH
REG_EWRPTL
REG_EWRPTH
REG_ETXSTL
REG_ETXSTH
REG_ETXNDL
REG_ETXNDH
REG_ERXSTL
REG_ERXSTH
REG_ERXNDL
REG_ERXNDH
REG_ERXRDPTL
REG_ERXRDPTH
REG_ERXWRPTL
REG_ERXWRPTH
REG_EDMASTL
REG_EDMASTH
REG_EDMANDL
REG_EDMANDH
REG_EDMADSTL
REG_EDMADSTH
REG_REG_EDMACSL
REG_EDMACSH
;REG_O0
;O1
;O2
REG_EIE
REG_EIR
REG_ESTAT
REG_ECON2
REG_ECON1
REG_EHT0
REG_EHT1
REG_EHT2
REG_EHT3
REG_EHT4
REG_EHT5
REG_EHT6
REG_EHT7
REG_EPMM0
REG_EPMM1
REG_EPMM2
REG_EPMM3
REG_EPMM4
REG_EPMM5
REG_EPMM6
REG_EPMM7
REG_EPMCSL
REG_EPMCSH
;O3
;O4
REG_EPMOL
REG_EPMOH
;O5
;O6
REG_ERXFCON
REG_EPKTCNT
;O7
;REG_EIE.
;REG_EIR.
;REG_ESTAT.
;REG_ECON2.
;ECON1.
REG_MACON1
;O8
REG_MACON3
REG_MACON4
REG_MABBIPG
;O9
REG_MAIPGL
REG_MAIPGH
REG_MACLCON1
REG_MACLCON2
REG_MAMXFLL
REG_MAMXFLH
;O10
;O11
;O12
;O13
;O14
;O15
REG_MICMD
;O16
REG_MIREGADR
;O17
REG_MIWRL
REG_MIWRH
REG_MIRDL
REG_MIRDH
;O18
;EIE..
;EIR..
;ESTAT..
;ECON2..
;ECON1..
REG_MAADR5
REG_MAADR6
REG_MAADR3
REG_MAADR4
REG_MAADR1
REG_MAADR2
REG_EBSTSD
REG_EBSTCON
REG_EBSTCSL
REG_EBSTCSH
REG_MISTAT
;O19
;O20
;O21
;O22
;O23
;O24
;O25
REG_EREVID
;O26
;O27
REG_ECOCON
;O28
REG_EFLOCON
REG_EPAUSL
REG_EPAUSH
;O29
;EIE...
;EIR...
;ESTAT...
;ECON2...
;ECON1...
PHCON1_L
PHCON1_H
PHSTAT1_L
PHSTAT1_H
PHID1_L
PHID1_H
PHID2_L
PHID2_H
PHCON2_L
PHCON2_H
PHSTAT2_L
PHSTAT2_H
PHIE_L
PHIE_H
PHIR_L
PHIR_H
PHLCON_L
PHLCON_H
ENDC
;************************REGISTROS A INCLUIR EN EL PROGRAMA PRINCIPAL************************
; TEMP_BANK
; WCR_DIR
; FLAGS
; BANCO_ENCJ60
; PUNTERO_BANCO
;********************************************************************************************
;definicion de registros a poner en programa principal
;#define   ETH bcf FLAGS,0 ;gestion de registros ETH
;#define MAC_MII bsf FLAGS,0 ;gestion de registros MAC y MII

PUSH_BANCO MACRO
movlw ECON1 ;registro a leer
call rcr ;lee registro de control
movwf TEMP_BANK ;guarda en TEMP_BANK el valor actual del banco seleccionado
ENDM

POP_BANCO MACRO ;restaura registro del banco del enc28j60
movf TEMP_BANK,W
call BANKenc28j60
ENDM

;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< TRASPASO DE REGISTROS DE CONTROL DEL 28J60 AL PIC>>>>>>>>>>>>>>>>>>>>>>>

REG_28J60 ETH ;selecciona lectura de registros ETH

PUSH_BANCO ;guarda valor actual de banco

lfsr 0,0100h ;direcion de la ram donde se empezara a guardar los valores de los registros del enc28j60
clrf TEMP_FSR ;borra temporal FSR
clrf PUNTERO_BANCO ;borra registro que apunta a la seleccion de bancos del enc28j60
movf PUNTERO_BANCO,W ;valor del primer banco a leer=BANCO 0
call BANKenc28j60 ;subprograma de seleccion de banco
repi call DESCART_BANK

movf TEMP_FSR,W ;carga en w el valor del registro a leer del enc28j60.
call rcr ;comando de lectura de registro de control del enc28j60
movwf INDF0 ;mete valor del registro de control leido del enc28j60,en la posicion de memoria ram apuntada por TEMP_FSR
incf FSR0L,F ;incrementa puntero bajo de FSR.
incf TEMP_FSR ;incrementa temporal del registro FSR

;Aqui se busca el primer registro MAC para preparar su lectura y posteriores MII
movlw 0x0c ;direccion de registro MII
xorwf TEMP_FSR,W ;comprueva si ha llegado
btfsc STATUS,Z ;si ha llegado-
call reg_mac_mii ;salta a subprograma de modo de lectura en registros MAC/MII

;Aqui se asegura que los registros EIE,EIR,ESTAT,ECON2 y ECON1. solo se lean en el banco 0.esto es para ahorrar recursos
;ya que estos registros estan mapeados en los cuatro bancos del enc28j60
movlw 0x00 ;valor banco 0
xorwf PUNTERO_BANCO,W ;comprueva si esta en ese banco
btfss STATUS,Z ;si esta en un banco distinto del banco 0,leer solo hasta la direccion 1Bh
movlw 0x1A
btfsc STATUS,Z ;si esta en el banco 0,lee hasta la direccion 1Fh
movlw 0x20

xorwf TEMP_FSR,W ;comprueva si TEMP_FSR a llegado al valor anterior
btfss STATUS,Z ;si a llegado,salta.
goto repi ;en caso contrario ir a repi
clrf TEMP_FSR ;borra el registro TEMP_FSR(para empezar la lectura del primer registro del siguente banco del enc28j60)
incf PUNTERO_BANCO,F ;incrementa el valor del siguiente banco a leer del enc28j60

movlw 0x04 ;valor tope de bancos a leer
xorwf PUNTERO_BANCO,W ;compara el valor anterior con el banco seleccionado del enc28j60
btfsc STATUS,Z ;y si es mayor de 3,
goto phy_reg ;salta a subprograma de lectura de registros PHY
movf PUNTERO_BANCO,W ;en caso contrario carga el valor del banco a seleccionar en w
call BANKenc28j60 ;y salta al subprograma de conmutacion de bancos del enc28j60
goto repi ;salta a repi

reg_mac_mii movlw 0x02
xorwf PUNTERO_BANCO,W ;compara el valor anterior con el banco seleccionado del enc28j60
btfsc STATUS,Z ;y si es igual a 2,
MAC_MII ;activa modo de lectura de registros MAC/MII (estos registros tienen diferente forma de lectura respecto a los ETH
return ;en caso contrario.retorna

;aqui se selecciona el puntero de los registros del enc28j60 dentro de la tabla.segun el el banco actual.
DESCART_BANK movlw 0x00 ;valor para banco 0
xorwf PUNTERO_BANCO,w ;comprueva el banco actual seleccionado
btfss STATUS,Z ;y si no es el seleccionado anteriormente-
goto R1 ;-comprueva el siguiente banco
movlw 0x00 ;en caso de que sea afirmativo-
goto DESCARTE ;salta a programa de descarte de registros.
R1 movlw 0x01
xorwf PUNTERO_BANCO,w
btfss STATUS,Z
goto R2
movlw 0x04 ;saltos dentro de la tabla
goto DESCARTE
R2 movlw 0x02
xorwf PUNTERO_BANCO,w
btfss STATUS,Z
goto R3
movlw 0x0A ;saltos dentro de la tabla
goto DESCARTE
R3 movlw 0x03
xorwf PUNTERO_BANCO,w
btfss STATUS,Z
return
movlw 0x16 ;saltos dentro de la tabla
goto DESCARTE
return
;Aqui se busca los registros nulos del enc28j60 para descartarlos.la tabla se hubicara en la direccion 1050h
DESCARTE clrf TBLPTRL ;borra byte bajo de puntero de tabla
clrf TBLPTRU ;borra byte ultra de puntero de tabla.
addlw 0x50 ;suma el valor especificado al contenido en W.donde el valor de W contiene el valor del primer registro nulo
movwf TBLPTRL ;mete el valor en el byte bajo del registro puntero de tabla.
movlw 0x10 ;valor del byte alto del registro puntero de tabla
movwf TBLPTRH

DESC2 tblrd*+ ;incrementa puntero de tabla despues de su lectura
movlw 0xff ;valor de fin de tabla
xorwf TABLAT,W ;compara el valor leido de la tabla con valor fin de tabla
btfsc STATUS,Z ;si es igual-
return ;-retorna
movf TABLAT,W ;carga en w el valor leido en tabla
xorwf TEMP_FSR,w ;comparalo con la direccion del registro a leer
btfss STATUS,Z ;si es diferente-
goto DESC2 ;busca siguiente valor en tabla
incf TEMP_FSR,f ;si es igual.incrementa valor a leer en tabla-
GOTO DESC2 ;-y compara siguiente valor en tabla.

movf TEMP_TABLA,w ;temporal de numero de bytes a leer
xorwf TBLPTRL,w ;compara valor con puntero de tabla
btfsc STATUS,Z ;compara los valores anteriores
return ;si son iguales,retorna

;aqui se leen los registros PHY
phy_reg movlw 0xff ;reinicio del registro TEMP_FSR
movwf TEMP_FSR

rep_phy incf TEMP_FSR,F ;direccion del registro PHY a leer
movlw 0x15 ;valor final de registros a leer
xorwf TEMP_FSR,W ;comprueva si a llegado.
btfsc STATUS,Z
goto fin_emul ;si a llegado,finaliza el programa
movf TEMP_FSR,W ;carga valor de registro PHY a leer
CALL leePHY ;lee registro PHY
movff DATO_L,INDF0 ;dato bajo del registro PHY leido
incf FSR0L,F ;siguiente registro a leer
movff DATO_H,INDF0 ;dato alto del registro PHY leido
incf FSR0L,F ;siguiente registro a leer

movlw 0x03 ;ultimo valor de los 4 primeros registros PHY
xorwf TEMP_FSR,W ;comprueva si a llegado
btfss STATUS,Z
goto rep_phy
movlw 0x0c
addwf TEMP_FSR ;si a llegado,salta al siguente registro a leer(PHCON2)en este caso
goto rep_phy
fin_emul POP_BANCO ;restaura banco
return ;retorna

org 0x1050
descart DATA 0x1918,0xff1A,0x1312,0x1716,0xff1A,0x0501,0x0D0C,0x0F0E,0x1110,0x1513,0xff1A,0x0C0B,0x0E0D,0x100F,0x1311,0x1614,0xff1A
« Última modificación: 11 de Noviembre de 2010, 19:18:55 por groundman »
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: librerias asm para el enc28j60.con pic18Fxxxx
« Respuesta #4 en: 11 de Noviembre de 2010, 20:04:50 »
y tambien pongo los subprogramas para la lectura y escritura en los registros PHY.

Código: [Seleccionar]
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< SELECCION DE BANCOS >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

BANKenc28j60

movwf BANCO ;carga en w el valor del banco a conmutar
movlw ECON1 ;carga el valor anterior en el registro de control ECON1
addlw WCR ;suma a w valor de comando de escritura en registro de control
bcf CS2 ;habilita chip enc28j60
call transcept ;envia registro selector de bancos
movf BANCO,w
call transcept ;envia banco a seleccionar
bsf CS2 ;deshabilita chip enc28j60
return 0 ;retorna


;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< LECTURA DE REGISTROS PHY >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><

leePHY movwf DATO ;mete en DATO el contenido de W (registro PHY a leer)
BANCO_2 ;selecciona banco donde se hubican los registros MIREGADDR,MIRDL Y MIRDH
movlw MIREGADR ;mete en W el valor del registro MIREGADR (14h)
call wcr ;escritura en registro de control

movlw MIIRD ;carga en W el bit MIIRD del registro MICMD
movwf DATO ;metelo en el registro DATO
movlw MICMD ;carga en W el valor del registro MICMD(12h)
call bfs ;pon a 1 el bit MIIRD del registro de control MICMD
call DEMORA ;demora de 10,24uS
call comprueva ;comprueva si ha terminado la escritura

BANCO_2 ;selecciona banco 2
movlw MIIRD ;carga en W el valor del registro MIIRD
movwf DATO ;metelo en el registro DATO
movlw MICMD ;mete en W el valor del registro MICMD (12h)
call bfc ;pon a 0 el bit MIIRD del registro de control MICMD

movlw MIRDL ;mete en W el valor del registro MIRDL (18h)
call rcr ;lectura de registro de control
movff rxdata,DATO_L ;pasa dato leido al registro DATO_L

movlw MIRDH ;mete en W el valor del registro MIRDH (19h)
call rcr ;lectura de registro de control
movff rxdata,DATO_H ;pasa dato leido al registro DATO_L
ETH ;pasa a modo lectura de registros ETH
return 0 ;retorna




;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ESCRITURA DE REGISTROS PHY >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><

escribePHY movwf DATO ;mete en DATO el contenido de W

BANCO_2 ;conmuta banco 2
movlw MIREGADR ;mete en W el valor del registro MIREGADR (14h)
call wcr ;escritura en registro de control

movf DATO_L,w ;mueve el contenido del registro  DATO_L en W
movwf DATO ;mete en DATO el contenido de W
movlw MIWRL ;mete en W el valor del registro MIWRL (16h)
call wcr ;escribe en el registro de control MIWRL el contenido del registro DATO_L

movf DATO_H,w ;mueve el contenido del registro  DATO_H en W
movwf DATO ;mete en DATO el contenido de W
movlw MIWRH ;mete en W el valor del registro MIWRH (17h)
call wcr ;escribe en el registro de control MIWRH el contenido del registro DATO_H
call DEMORA ;demora de 10,24uS

call comprueva ;comprueva si ha terminado la escritura

return 0 ;retorna
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Comprovacion del bit BUSY del registro de control MISTAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
comprueva BANCO_3
MAC_MII
comp2 movlw MISTAT
call rcr
btfss rxdata,BUSY
return
goto comp2
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: librerias asm para el enc28j60.con pic18Fxxxx
« Respuesta #5 en: 28 de Noviembre de 2010, 11:29:14 »
voy a poner varios archivos sobre el programa que estoy desarroyando.el cual ire modificando algunas instrucciones para que haga diferentes funciones.
y de esta forma aprender determinados sistemas de funcionamiento.
en todo momento tenemos activado el SPI debugger para saber como se comunican el enc28j60 y el pic.y tambien activo el osciloscopio para entender
el funcionamiento de la comunicacion SPI.una vez entendido como funciona el sistema SPI.nos sera muy facil entender el SPI debugger.y veremos en el SPI debugger lo que hace el enc28j60 como le pasaba al programador en la pelicula matrix.  :D
ya que los comandos son facilmente identificables por valores exagesimales.ademas de saber si esta leyendo o escribiendo.



en el programa principal ethernet.asm
he puesto en la zona PRINCIPAL diferentes llamadas a subprogramas.las cuales ire activando/desactivando segun la operacion que quiera realizar.

en este caso he realizado la llamada al subprograma juego_led.que realiza un juego de luces con los leds del enc28j60.y lo encierro en un bucle sin fin
para su funcionamiento.

tambien he desarroyado una libreria que al llamarla,se visualizan los estados de todos los registros del ENC28j60 excepto el buffer ethernet.
que realizare mas adelante.linea   call REG28J60.

Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: librerias asm para el enc28j60.con pic18Fxxxx
« Respuesta #6 en: 07 de Diciembre de 2010, 19:49:09 »
hola de nuevo.he cometido un error en uno de los subprogramas.me refiero al que conmuta los bancos de los registros de control.
resulta que envez de seleccionar solo los bits del registro ECON1 que conmutan los bancos.lo que hacia es meter un valor en susodicho registro.sin tener en cuenta la posible modificacion de los demas bits.

asi que he realizado otro programa que reemplaza al anterior.

;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< SELECCION DE BANCOS >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;Antes de la llamada a este subprograma,introducir en W el banco a seleccionar.
;si el banco seleccionado es distinto al 0,siempre se conmutara el banco 0 antes de conmutar el banco elegido.
BANKenc28j60
         
         movwf   BANCO         ;carga en BANCO el valor del banco a conmutar
         movff   DATO,TEMP_DATO   ;guarda registro DATO
         movlw   0x03         ;valor de reseteo de conmutacion de bancos
         movwf   DATO         ;dato  a enviar por SPI
         movlw   ECON1         ;hacia el registro de control ECON1
         call   bfc            ;borrado de los bits BSEL0 y BSEL1 (seleccion del banco 0)

         movlw   0x00         ;valor banco 0
         xorwf   BANCO,W         ;comprueva si el banco seleccionado es 0
         btfsc   STATUS,Z      ;si es 0
         return               ;retorna
         
         movff   BANCO,DATO      ;carga en DATO el valor del banco a conmutar
         movlw   ECON1         ;registro donde se conmutan los bancos
         call   bfs            ;activa bits seleccionados
         movff   TEMP_DATO,DATO   ;restaura registro DATO
         return
« Última modificación: 08 de Diciembre de 2010, 19:41:49 por groundman »
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: librerias asm para el enc28j60.con pic18Fxxxx
« Respuesta #7 en: 02 de Enero de 2011, 11:54:38 »
adjunto los ultimos progresos: recepcion de datos en enc28j60 y traspaso al pic.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado fidodido18

  • PIC18
  • ****
  • Mensajes: 312
Re: librerias asm para el enc28j60.con pic18Fxxxx
« Respuesta #8 en: 02 de Enero de 2011, 13:29:33 »
adjunto los ultimos progresos: recepcion de datos en enc28j60 y traspaso al pic.
Te felicito mi hermano, tienes que ser muy arriesgado para trabajar con ensamblador, estando a la mano tantas librerias para el lenguaje C...
Yo ya ni me acuerdo de la programacion en assembler. :D

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: librerias asm para el enc28j60.con pic18Fxxxx
« Respuesta #9 en: 02 de Enero de 2011, 15:24:43 »
gracias.no digo que sea lo mas practico ni lo mas rapido.pero creo que es la unica manera de aprender como funciona por dentro este controlador de ethernet.
cuando he empezado con esto no sabia lo que hera una comunicacion SPI.y ahora veo los bytes en las tramas del osciloscopio.y los comandos en el SPI DEBUGGER.

esto lo he intentado con C y no me lo visualiza.solo en un programa que baje en C que no usaba el SPI interno del chip.un atraso pero por algo lo haria asi su autor.
y solo funcionaba el osciloscopio con señales que no correpondian.y el SPI nada de nada.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: librerias asm para el enc28j60.con pic18Fxxxx
« Respuesta #10 en: 02 de Enero de 2011, 15:26:41 »

By groundman at 2011-01-02

en este programa los datos capturados en el buffer ethernet del enc28j60 son enviados a la zona de memoria del pic
ubicada entre las direcciones 170h y 3ffh.con esta cantidad de momemoria tenemos mas que de sobra para analizar
packets recibidos.

quiero empezar por analizar un packet de los tantos que circulan por la red.
en este caso el enc28j60 a capturado un packet que por la informacion que se ve en la imagen es un broadcast.

este tipo de paquetes siempre siempre se reciben ya que se transmiten a todos los ordenadores de la intranet.

es facil distinguirlos porque en parte del paket se distinguen los 6 bytes FF.FF.FF.FF.FF.FF

voy a descomponer el paquete a partir de la direccion 170h que es el principio de los datos leidos del buffer
ethernet.y utilizando el wireshark confrontare los datos para saber su funcion.quizas este paket no sea de
los mas sencillos a analizar pero es el primer broadcast que he capturado.

los protocolos usados en este paquete son:eth,ip,udp,nbns


66.00.60.00.80.00   =no forman parte del paquete a gestionar.los dos primero bytes contienen la dirección donde
          se guardará el próximo paquete.los otros no son muy importantes.

FF.FF.FF.FF.FF.FF   =destino: direccion de broadcast

00:1e:ec:59:ea:40   =fuente: en este caso una de las targetas de red de otro PC.

08.00         =type (IP)

45.00         =version (IPV4)

00         =diferenciated service

00.4E         =longitud total 78bytes contando desde la version hasta el final(no se inclulle las mac ni el type)

34.32         =identificacion (13362) numero de paquetes recividos de la misma fuente(ip 192.168.1.110)

00.00         =flags,fragment ofset

80         =tiempo de vida (128 saltos)

11         =protocolo (UDP)

81.af         =chequeo de cabezera (correcto)

c0.a8.01.6e      =fuente (192.168.1.110)

c0.a8.01.ff      =destino (192.168.1.255)

datagrama de usuario

00.89         =puerto fuente 137 (netbios-ns)

00.89         =puerto destino 137 (netbios-ns)

00.3a         =longitud 58bytes.numero de bytes desde datagrama de usuario hasta el final del paquete

85.09         =chequeo (validacion desactivada)

netbios name service

DB.41         =transaccion ID.

01.10         =flags. consulta de nombres

00.01         =preguntas

00.00         =respuesta rrs

00.00         =autoridad rrs

00.00         =adicional rrs

consultas

20.46.45.42.45.4D.45.4D.45.46.46.43.46.41.46.41.43.41.43.41.43.41.43.41.43.41.43.41.43.41.43.41.43.41

00.20         =tipo NB

00.01         =clase IN


por lo que estoy viendo.esta trama pertenece a un programa de acceso a escritorio remoto de internet.
que nisiquiera estoy usando.
aqui en el analisis de tramas es donde nos damos cuenta de la cantidad de porqueria que se nos cuela en nuestro
ordenador.
cosas que instalamos y nunca nos acordamos de desinstalar.otras que se instalan sin saberlo nosotros.
etc.etc
por eso empieza la ordenador a ponerse lento cuando utilizamos la red.pero bueno,no es el tema que nos aborda.



el protocolo eth: esta compuesto por las mac de destino,mac fuente y el tipo.

el protocolo IP:esta compuesto desde la version del protocolo(ipv4) hasta la IP de destino.

el protocolo udp:esta compuesto desde el puerto fuente hasta el checsum

y el resto es el protocolo nbns.netbios name service.


el protocolo eth que se puede decir que es la cabezera de la trama.siempre es enviada en un paquete.

el protocolo IP no le veo la mayor complicacion.aunque quizas hubiera que profundizar algo mas.

lo que si tendria que trabajame mas seria el UDP que tampoco lo veo tan dificil.pero el NBNS
no estoy enterado del todo para que sirve.me imagino que sera para obtener una ip automaticamente.pero no estoy seguro.

una curiosidad a tener en cuenta a la hora de analizar las tramas es que hay una forma de localizar el principio de cada packet.
hay que buscar una secuencia de bytes.

son estos: una secuencia de valores decimales del 1 al 4 y los 6 bytes de control que preceden a cada packet.

1
2
3
4
xx
xx
xx
xx
xx
xx
xx
comienzo de packet.
« Última modificación: 23 de Enero de 2011, 16:41:59 por groundman »
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: librerias asm para el enc28j60.con pic18Fxxxx
« Respuesta #11 en: 02 de Enero de 2011, 19:54:37 »


en este caso vamos a analizar una trama que se ha producido al intentar realizar una conexion desde el navegador de otro pc.
en el navegador del otro pc en la barra de conexion pondremos 192.168.1.111

estos son los resultados en el wireshark:

ff.ff.ff.ff.ff.ff      =destino. broadcast(todos los PCs de la red)

00.10.60.26.36.02      =fuente. mac del pc donde realizamos la conexion.

08.06            =type:       ARP

00.01            =hardware type: ethernet

08.00            =protocool type: IP

06            =hardware size

04            =protocol size

00.01            =opcode

00.10.60.26.36.02      =mac de origen

c0.a8.01.2b         =IP de origen   (192.168.1.43)

00.00.00.00.00.00      =mac objetivo

c0.a8.01.6f         =IP objetivo   (192.168.1.111)

00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00      relleno hasta los 60 bytes.



durante el intento de fallido de conectar con la ip 192.168.1.111.
se han capturado varios paquetes identicos a los que estoy exponiendo.por lo que veo parece que falta identificar la mac
del objetivo.

supongo que haria falta asignar la ip a la mac del enc28j60.creo que tiene algo que ver con la asignacion dhcp.
habra que experimentar.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado fidodido18

  • PIC18
  • ****
  • Mensajes: 312
Re: librerias asm para el enc28j60.con pic18Fxxxx
« Respuesta #12 en: 03 de Enero de 2011, 00:04:53 »
no he tenido la gran oportunidad de trabajar con este integrado, sin embargo algún día lo utilizare, y no se porque pensé que el integrado se encargaba de las tramas y conexiones con la red, pero veo que no es solo eso...
aunque la trama esta muy fácil de comprender(gracias por tu explicación), ahora viene la pregunta, podrías tener guardado en una memoria una pagina web? y recibir la peticiones cuando dan click sobre un link y desarrollar una especie de servidor de ultrabajo consumo con un 18f?

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: librerias asm para el enc28j60.con pic18Fxxxx
« Respuesta #13 en: 03 de Enero de 2011, 10:26:33 »
no he tenido la gran oportunidad de trabajar con este integrado, sin embargo algún día lo utilizare, y no se porque pensé que el integrado se encargaba de las tramas y conexiones con la red, pero veo que no es solo eso...
aunque la trama esta muy fácil de comprender(gracias por tu explicación), ahora viene la pregunta, podrías tener guardado en una memoria una pagina web? y recibir la peticiones cuando dan click sobre un link y desarrollar una especie de servidor de ultrabajo consumo con un 18f?

Los Stack de Microchip permiten elegir configuración y entre esas está utilizar ENC28J60, memoria de programa, memoria EEprom, ect, eso si se necesita un MCU de buena capacidad  :mrgreen:

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: librerias asm para el enc28j60.con pic18Fxxxx
« Respuesta #14 en: 03 de Enero de 2011, 11:16:05 »
yo en este caso utilizare una memoria externa.ya he comprado la 25lc1024.esto es para empezar.
mas adelante tendria que ver que es mas rentable.si usar un pic con mucha memoria o usar targetas de memoria para ubicar el servidor web.ya que no solo influye la cantidad de memoria a usar.tambien hay que mirar muy bien a la velocidad que se trasmiten los datos.
Montando mi primera impresora 3D (Raprep Prusa i3)