Está en la página 1de 653

UNIVERSIDAD DE SALAMANCA

E.T.S. DE INGENIERÍA INDUSTRIAL DE BÉJAR

DEPARTAMENTO DE FÍSICA APLICADA ÁREA DE TECNOLOGÍA ELECTRÓNICA

TRABAJO FIN DE CARRERA

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

AUTOR: GUILLERMO DAVID HERRERO GONZÁLEZ

TUTOR: JOSÉ TORREBLANCA GONZÁLEZ

BÉJAR, JUNIO 2007

UNIVERSIDAD DE SALAMANCA

E.T.S. DE INGENIERÍA INDUSTRIAL DE BÉJAR

DEPARTAMENTO DE FÍSICA APLICADA ÁREA DE TECNOLOGÍA ELECTRÓNICA

TRABAJO FIN DE CARRERA

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

AUTOR: GUILLERMO DAVID HERRERO GONZÁLEZ

TUTOR: JOSÉ TORREBLANCA GONZÁLEZ

BÉJAR, JUNIO 2007

D. Guillermo David Herrero González, autor del presente proyecto, comparte su autoría con su tutor D. José Torreblanca González, para los efectos que pudieran derivarse de su utilización para posteriores trabajos o proyectos fin de carrera.

Por lo tanto, tiene toda la autorización para poder reproducir, copiar y modificar dicho proyecto.

Béjar, Junio de 2007.

Fdo: D. Guillermo David Herrero González

v

ÍNDICE

A. MEMORIA

1. Introducción

29

1.1. Objeto

29

1.2. Descripción

29

30

1.2.2. Capítulo 3: Microcontroladores 30

1.2.3. Capítulo 4: Lenguaje De Programación C18 30

1.2.4. Capítulo 5: Lenguaje De Programación Visual Basic

30

1.2.5. Capítulo 6: Interconexión USB-PC 31

1.2.6. Capítulo 7: Aplicación 31

1.2.7. Cálculos 32

1.2.1. Capítulo 2: Nociones Básicas De La Norma USB 2.0

1.2.8. Planos

32

1.2.9. Pliego De Condiciones

32

1.2.10. Condiciones

32

2. Nociones Básicas De La Norma USB 2.0

2.1. Introducción

2.1.1. Motivación

35

35

35

2.2. Vocabulario

36

2.3. Historia

38

2.3.1. Utilización Prevista

2.4. Arquitectura

38

39

2.4.1. Descripción Del Sistema USB 39

2.4.2. Arquitectura Del Bus 39

2.4.3. Interfaz Física

40

2.4.3.1. Aspecto Eléctrico

40

2.4.3.2. Alimentación

40

2.4.3.3. Consumo 40

41

2.4.3.5. Protocolo Del USB 41

2.4.3.6. Robustez 41

2.4.3.4. Control De Consumo

2.4.3.7. Detección De Errores

42

2.4.3.8. Gestión De Errores

42

2.4.3.9. Configuración Del Sistema 42

2.4.3.10. Tipos De Transferencia

43

2.4.3.11. Tipo

Control

43

2.4.3.12. Tipo

Bulk

43

2.4.3.13. Tipo

Interrupt

43

2.4.3.14. Tipo

Isochronous

43

2.4.3.15. Asignación De La Banda De Paso

44

2.4.3.16. USB Device

44

2.4.3.17. Características De Un Periférico

44

2.5. Formatos De Los Paquetes

45

2.5.1. Token 45

2.5.2. Token Especial: Transacción Split

45

2.5.2.1. Transacciones Split 46

C ONEXIÓN A L P UERTO USB M EDIANTE U N M ICROCONTROLADOR 2.6. Estados

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

2.6. Estados Del USB

49

2.6.1. Por Defecto

50

2.6.2. Direccionado

51

2.6.3. Configuración

51

2.7. Enumeración Del Bus

3. Microntroladores

3.1. Introducción A Los Microcontroladores

51

55

55

3.1.1. Controlador Y Microcontrolador

55

3.1.2. Diferencia Entre Microprocesador Y Microcontrolador

56

3.1.3. Aplicaciones De Los Microcontroladores

57

3.1.4. El Mercado De Los Microcontroladores

58

3.2. ¿Qué Microcontrolador Emplear?

59

3.2.1.

Recursos Comunes A Todos Los Microcontroladores

61

3.2.1.1. Arquitectura Básica

61

3.2.1.2. El Procesador O CPU

62

3.2.1.3. Memoria

62

3.2.1.4. ROM Con Máscara

63

3.2.1.5. OTP

63

3.2.1.6. EPROM

63

3.2.1.7. EEPROM

64

3.2.1.8. FLASH

64

3.2.1.9. Puertos De Entrada Y Salida

65

3.2.1.10. Reloj Principal

65

3.2.2.

Recursos Especiales

65

3.2.2.1. Temporizadores O “Timers”

66

3.2.2.2. Perro Guardián O “Watchdog”

66

3.2.2.3. Protección Ante Fallo De Alimentación O “Brownout”

66

3.2.2.4. Estado De Reposo O De Bajo Consumo

66

3.2.2.5. Conversor A/D (CAD)

67

3.2.2.6. Conversor D/A (CDA)

67

3.2.2.7. Comparador Analógico

67

3.2.2.8. Modulador De Anchura De Pulsos O PWM

67

3.2.2.9. Puertos De E/S Digitales

67

3.2.2.10. Puertos De Comunicación

68

3.2.3.

Herramientas Para El Desarrollo De Aplicaciones

68

3.2.3.1.

Desarrollo Del Software:

68

3.3. La Familia De Los PIC Como Elección

69

3.3.1.

Características Relevantes

70

3.3.1.1. Arquitectura

70

3.3.1.2. Segmentación

71

3.3.1.3. Formato De Las Instrucciones

71

3.3.1.4. Juego De Instrucciones

71

3.3.1.5. Todas Las Instrucciones Son Ortogonales

71

3.3.1.6. Arquitectura Basada En Un “Banco De Registros”

71

3.3.1.7. Diversidad De Modelos De Microcontroladores Con Prestaciones Y Recursos Diferentes

71

3.3.1.8. Herramientas De Soporte Potentes Y Económicas

71

3.3.2.

Las gamas de PIC

72

3.3.2.1. La Gama

Enana: PIC12C(F)XXX De Terminales

73

3.3.2.2. Gama Baja O Básica: PIC16C5X Con Instrucciones De 16bits

74

3.3.2.3. Gama Media. PIC16CXXX Con Instrucciones De 16bits

76

vi

GUILLERMO DAVID HERRERO GONZÁLEZ

G UILLERMO D AVID H ERRERO G ONZÁLEZ 3.3.2.4. Gama Alta: PIC17CXXX Con Instrucciones De 16bits

3.3.2.4. Gama Alta: PIC17CXXX Con Instrucciones De 16bits

77

3.3.2.5. Gama

Mejorada: PIC18FXXXX

78

3.4. Familia PIC18Fxx5x

79

3.4.1. Diagrama de Pines 79

3.4.2. Perspectiva General Del Dispositivo 81

3.4.3. Configuración Del Oscilador 90

91

3.4.3.2. Tipos De Oscilador 91

3.4.3.1. Control Del Oscilador

3.4.3.2.1. Modos Del Oscilador Y Operaciones Con El USB

91

3.4.3.2.2. XTAL/Resonadores Cerámicos

92

3.4.3.2.3. Señal De Reloj Externa 93

3.4.3.2.4. Multiplicador De Frecuencia PLL

3.4.3.2.5. Bloque Interno Del Oscilador 95

98

3.4.3.3.1. Operaciones Con Baja Velocidad (USB ) 99

3.4.3.3.2. Funcionamiento Diferente El Reloj Del USB Y

El Del Microcontrolador 100

94

3.4.3.3. Configuración Del Oscilador Para El USB

3.4.3.4.

Fuentes De Reloj Y Cambios De Oscilador

100

3.4.3.4.1. Registros De Control Del Oscilador

101

3.4.3.4.2. Transiciones Del Oscilador 102

3.4.3.5. Efecto De Los Modos De Control De Energía En Varias

 

Fuentes

De Reloj

103

3.4.3.6. Retraso En El Inicio

104

3.4.4.

Modos De Control De Energía

105

3.4.4.1. Seleccionar Los Modos De Control De Energía 106

3.4.4.1.1. Fuentes Del Reloj

106

3.4.4.1.2. Comienzo De Los Modos De Control De Energía

106

3.4.4.1.3. Transiciones De Reloj Y Puntero De Estado

107

3.4.4.1.4. Múltiples Comandos SLEEP

107

3.4.4.2.

Modos De Ejecución

108

3.4.4.2.1. Modo PRI_RUN 108

3.4.4.2.2. Modo

SEC_RUN

108

3.4.4.2.3. Modo

RC_RUN

109

3.4.4.3. Modo SLEEP

111

3.4.4.4. Modos De Reposo

112

3.4.4.4.1. Modo PRI_IDLE

112

3.4.4.4.2. MODO SEC_IDLE 113

3.4.4.4.3. Modo RC_IDLE

114

3.4.4.5.

Salir De Los Modos SLEEP Y Reposo

114

3.4.4.5.1. Salida

Por

Una Interrupción

115

3.4.4.5.2. Salida Por Desbordamiento Del WDT

115

3.4.4.5.3. Salida

Por

Reset

115

3.4.4.5.4. Salida Sin Un Retraso Del Inicio Del Oscilador 116

3.4.5. RESET 116

3.4.5.1. Registro RCON

117

3.4.5.2. Master Clear Reset (MCLR*)

119

3.4.5.3. Reset Por Subida De Tensión (POR)

119

3.4.5.4. Reset Por Cese De Tensión (BOR)

120

3.4.5.4.1. Software Que Activa El BOR

120

3.4.5.4.2. Detección Del BOR

121

3.4.5.4.3. Desactivar BOR En El Modo SLEEP 121

121

3.4.5.5.1. Temporizador De Inicio (PWRT) 122

3.4.5.5.2. Oscilador Temporizador De Arranque (OST)

122

3.4.5.5. Contadores Del Reset

vii

C ONEXIÓN A L P UERTO USB M EDIANTE U N M ICROCONTROLADOR   3.4.5.5.3.

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

 

3.4.5.5.3. Temporizador Del Control De PLL

122

3.4.5.5.4. Secuencia

De Retraso

122

3.4.5.6.

Estado De Los Registros En Un Reset

123

3.4.6.

Organización De La Memoria

123

3.4.6.1.

Organización De La Memoria De Programa

124

 

3.4.6.1.1. Contador

De Programa

125

3.4.6.1.2. Devolver La Dirección De La Pila

125

3.4.6.1.3. Pila De Almacenamiento Rápido

128

3.4.6.1.4. Operaciones De Búsqueda En Las Tablas De Memoria De Programa

129

3.4.6.2.

Ciclos Instrucción En Los PIC18

130

 

3.4.6.2.1. Esquema De Reloj

130

3.4.6.2.2. Instrucción Flow/Pipelining

130

3.4.6.2.3. Instrucciones En La Memoria De Programa

131

3.4.6.2.4. Instrucciones

De

Dos Palabras

131

3.4.6.3.

Organización De La Memoria De Datos

132

 

3.4.6.3.1. RAM Del USB

134

3.4.6.3.2. Registro Selector Del Banco (BSR)

134

3.4.6.3.3. Acceso Al Banco

135

3.4.6.3.4. Registro De Archivos De Propósito General

136

3.4.6.3.5. Registros De Función Específica

136

3.4.6.3.6. Registro STATUS

137

3.4.6.4.

Modos De Direccionamiento De Los Datos

139

 

3.4.6.4.1. Direccionamiento

Inherente Y Literal

139

3.4.6.4.2. Direccionamiento Directo

139

3.4.6.4.3. Direccionamiento

Indirecto

140

3.4.6.5. Memoria Del Programa Y El Sistema De Instrucciones Extendidas

143

3.4.6.6. Memoria De Datos Y El Sistema De Instrucciones Extendidas

143

 

3.4.6.6.1. Direccionamiento Indexado Con Literal Compensado

144

3.4.6.6.2. Instrucciones Afectadas Por El Modo Indexado Por Literal Compensado

144

3.4.6.6.3. Mapeo Del Banco De Acceso En El Modo Indexado Por Literal Compensado

146

3.4.6.6.4. BSR En El Modo Indexado Por Literal Compensado

147

3.4.7.

Memoria Flash De Programa

147

3.4.7.1. Escribir Y Leer En Tablas

 

147

3.4.7.2. Registros De Control

149

 

3.4.7.2.1. Registros EECON1 y EECON2

149

3.4.7.2.2. Registro De Tabla Latch (TABLAT)

151

3.4.7.2.3. Registro Del Puntero De Tabla (TBLPTR)

151

3.4.7.2.4. Límites Del Puntero De Tabla

151

3.4.7.3. Lectura De La Memoria De Programa Flash

152

3.4.7.4. Borrado De Memoria Flash De Programa

153

 

3.4.7.4.1.

Secuencia De Borrado De La Memoria Flash De Programa

154

3.4.7.5.

Escribir En La Memoria Flash De Programa

155

 

3.4.7.5.1. Secuencia De Escritura En La Memoria Flash De Programa

156

3.4.7.5.2. Verificación De La Escritura

158

3.4.7.5.3. Finalización Inesperada De La Operación De Escritura

159

3.4.8.

Memoria De Datos EEPROM

160

3.4.8.1. Registros EECON1 Y

EECON2

160

3.4.8.2. Lectura De Los Datos De La Memoria EEPROM

161

3.4.8.3. Escritura En La Memoria De Datos EEPROM

161

3.4.8.4. Verificación De La Escritura

162

3.4.8.5. Operación Con Código De Protección

162

viii

GUILLERMO DAVID HERRERO GONZÁLEZ

G UILLERMO D AVID H ERRERO G ONZÁLEZ 3.4.8.6. Protección Contra Es crituras Fa lsas 162

3.4.8.6. Protección Contra Escrituras Falsas

162

3.4.8.7. Usar Los Datos EEPROM

163

3.4.9.

Multiplicador DE 8x8 Por Hardware

165

3.4.9.1.

Introducción

165

3.4.10. Interrupciones 168

169

3.4.10.2. Registros INTCON 170

3.4.10.1. Interrupciones Del USB

3.4.10.3. Registros

PIR

173

3.4.10.4. Registros

PIE

176

3.4.10.5. Registros

IPR

178

3.4.10.6. Registro RCON

180

3.4.10.7. Pines De Interrupciones INTn

181

3.4.10.8. Interrupción TMR0 181

3.4.10.9. Interrupción Al Cambiar PORTB 181

3.4.10.10. Almacenamiento De Datos Durante La Interrupción

181

3.4.11.

Puertos De Entrada-Salida

182

3.4.11.1. Registros PORTA, TRISA Y LATA

183

3.4.11.2. Registros PORTB, TRISB Y LATB

186

3.4.11.3. Registros PORTC, TRISC Y LATC

191

3.4.11.4. Registros PORTD, TRISD Y LATD

194

3.4.11.5. Registros PORTE, TRISE Y LATE

197

 

3.4.11.5.1.

PORTE En Los Dispositivos De 28-PIN

198

3.4.12.

Módulo TIMER0

201

3.4.12.1. Operaciones Del TIMER0

202

3.4.12.2. Lecturas Y Escrituras Del Timer0 En Modo De 16BITS 202

203

3.4.12.3. Prescaler

3.4.12.3.1. Conmutación En La Asignación Del Prescaler 203

3.4.12.4.

Interrupción Timer0

203

3.4.13.

Módulo Timer1

205

3.4.13.1. Operaciones Del Timer1 207

3.4.13.2. Modo De Lectura/Escritura De 16-Bit Del Timer1

207

3.4.13.3. Oscilador Timer1

208

3.4.13.3.1. Usar Timer1 como Fuente De Reloj 209

209

3.4.13.3.3. Consideraciones Del Layout Del Oscilador Timer1 209

3.4.13.3.2. Opción De Baja Potencia Timer1

3.4.13.4. Interrupción Timer1

210

3.4.13.5. Reset Del Timer1 Usando El Disparador Especial Del Acontecimiento CCP

210

3.4.13.6. Usar Timer1 como Reloj De Tiempo Real (RTC)

211

3.4.14.

Módulo Timer2

213

3.4.14.1. Operaciones Del Timer2 214

3.4.14.2. Interrupción Timer2

215

3.4.14.3. Salida Del TMR2

215

3.4.15.

Módulo Timer3

216

3.4.15.1. Operaciones Del Timer3 218

3.4.15.2. Modo De Lectura/Grabación De 16bit

218

3.4.15.3. Usar El Oscilador Timer1 como Fuente De Reloj Timer3

219

3.4.15.4. Interrupción Timer3

219

3.4.15.5. Reset Del Timer3 usando El Disparador Especial De Acontecimientos Del CCP

220

3.4.16.

Módulos Captura/Comparación/PWM (CCP)

221

3.4.16.1.

Configuración Del Módulo CCP

222

3.4.16.1.1. Recursos De Los Módulos CCP Y Del Temporizador

222

3.4.16.1.2. CCP2 Asignación De Pin

223

ix

C ONEXIÓN A L P UERTO USB M EDIANTE U N M ICROCONTROLADOR   3.4.16.2.

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

 

3.4.16.2.

MODO CAPTURA

224

3.4.16.2.1. Configuración Del Pin CCP

224

3.4.16.2.2. Selección De Modo Timer1/Timer3

224

3.4.16.2.3. Interrupción Por Software

224

3.4.16.2.4. CCP Prescaler

224

3.4.16.3.

Modo Comparación

225

3.4.16.3.1. Tipo De Conexión CCP

225

3.4.16.3.2. Selección De Modo Timer1/Timer3

226

3.4.16.3.3. Modo De Interrupción Por Software

226

3.4.16.3.4. Disparador De Acontecimiento Especial

226

3.4.16.4.

Modo PWM

228

3.4.16.4.1. Periodo Del PWM

229

3.4.16.4.2. Duty Cicle PWM

229

3.4.16.4.3. PWM Auto-Apagado (CCP1 Solamente)

230

3.4.16.4.4. Configuración Del PWM

230

3.4.17.

Módulo Mejorado De Captura/Comparación/PWM (ECCP)

232

3.4.17.1.

Salidas Y Configuración Del ECCP

232

3.4.17.1.1.

Recursos Del Temporizador Y Módulo ECCP

232

3.4.17.2.

Modos Captura Y Comparación

234

3.4.17.2.1.

Disparador De Acontecimiento Especial

234

3.4.17.3. El Modo Estándar De PWM

234

3.4.17.4. El Modo PWM Mejorado

235

 

3.4.17.4.1. Periodo De PWM

236

3.4.17.4.2. Duty Cicle PWM

236

3.4.17.4.3. Configuraciones De La Salida De PWM

237

3.4.17.4.4. El Modo Half-Bridge

238

3.4.17.4.5. Modo Full-Bridge

239

3.4.17.4.6. Retraso Programable “Banda-Muerta”

243

3.4.17.4.7. PWM Mejorado Auto-Apagado

244

3.4.17.4.8. Consideraciones

De Reinicio

247

3.4.17.4.9. Pasos Para Configurar El PWM

247

3.4.17.4.10. Operando En Los Modos De Ahorro De Energía

248

3.4.17.4.11. Efectos De Un Reset

249

3.4.18.

Bus Serie Universal (USB)

250

3.4.18.1. Descripción Del Periférico USB

250

3.4.18.2. Estado Y Control Del USB

251

 

3.4.18.2.1. Registro De Control Del USB (UCON)

251

3.4.18.2.2. Registro De Configuración Del USB (UCFG)

253

3.4.18.2.3. Registro De Estado Del USB (USTAT)

258

3.4.18.2.4. Control De Los Endpoints Del USB

260

3.4.18.2.5. Registro De Dirección Del USB (UADDR)

261

3.4.18.2.6. Registros Del Número Del Frame Del USB (UFRMH: UFRML)

261

3.4.18.3. RAM Del USB

262

3.4.18.4. Buffer Descriptor Y Tabla Del Buffer Descriptor

263

 

3.4.18.4.1. Estado Y Configuración De Los BD

264

3.4.18.4.2. Byte De Cuenta De BD

268

3.4.18.4.3. Validación De La Dirección De BD

268

3.4.18.4.4. Buffering Ping-Pong

269

3.4.18.5.

Interrupciones Del USB

272

3.4.18.5.1. Registro De Estado De Las Interrupciones Del USB (UIR)

274

3.4.18.5.2. Registro De Permiso De Las Interrupciones (UIE)

275

3.4.18.5.3. Registro De Estado De Las Interrupciones Por Error Del USB (UEIR)

277

3.4.18.5.4. Registro De Permiso De Las Interrupciones De Error (UEIE)

278

x

GUILLERMO DAVID HERRERO GONZÁLEZ

G UILLERMO D AVID H ERRERO G ONZÁLEZ 3.4.18.6. Modos De Energía Del USB 279 3.4.18.6.1.

3.4.18.6.

Modos De Energía Del USB

279

3.4.18.6.1. Sólo Energía En El Bus

279

3.4.18.6.2. Sólo

Self-Power

279

3.4.18.6.3. Energía Dual Con Dominancia Self-Power

279

3.4.18.7. Streaming Parallel Port (SPP)

280

3.4.18.8. Oscilador

280

3.4.18.9. Descripción Del USB

282

3.4.18.9.1. Esquema De Capas

282

3.4.18.9.2. Frames

283

3.4.18.9.3. Transferencias 283

283

3.4.18.9.5. Enumeración 284

3.4.18.9.4. Energía

3.4.18.9.6. Descriptores

284

3.4.18.9.7. Velocidad Del Bus

285

3.4.18.9.8. Especificaciones De Clase Y Drivers

285

3.4.19.

Puerto Paralelo Streaming (SPP)

286

3.4.19.1. Configuración Del SPP 286

3.4.19.1.1. Permitir El SPP 287

3.4.19.1.2. Registro De Datos 288

3.4.19.1.3. Estados De Espera

289

3.4.19.1.4. SPP Pull-Ups

289

3.4.19.2. Sistema Para El Control Del USB

290

3.4.19.3. Sistema Para El Control Del Microcontrolador

291

3.4.19.3.1. Interrupciones SPP

291

3.4.19.3.2. Escribir

El SPP

292

3.4.19.3.3. Lectura Del SPP

292

3.4.20.

Módulo Convertidor De 10-Bit Analógico A Digital (A/D)

294

3.4.20.1. Requisitos De

La Adquisición A/D

300

3.4.20.2. Seleccionar Y Configuración El Tiempo De Adquisición Tiempo

301

3.4.20.3. Seleccionar El Reloj De Conversión A/D

302

3.4.20.4. Operación En Los Modos De Ahorro De Energía

303

3.4.20.5. Configuración De Los Pines De Los Puertos Analógicos

303

3.4.20.6. Conversiones A/D

304

3.4.20.7. Descarga 304

3.4.20.8. Uso Del Disparador Del CCP2 305

3.4.21.

Módulo Comparador

307

3.4.21.1. Configuración Del Comparador

309

3.4.21.2. Operaciones Del Comparador

309

3.4.21.3. Referencia Del Comparador 309

3.4.21.3.1. Señal

De

Referencia

Externa

310

3.4.21.3.2. Señal

De

Referencia

Interna

310

3.4.21.4. Tiempo De Respuesta Del Comparador

310

3.4.21.5. Salidas Del Comparador 310

311

3.4.21.7. Operaciones Del Comparador Durante El Modo SLEEP 312

3.4.21.8. Efectos De Un Reset 312

312

3.4.22. Módulo Comparador De Tensión De Referencia 314

3.4.22.1. Configuración Del Módulo Comparador De Tensión De Referencia 314

3.4.22.2. Exactitud/Error De La Tensión De Referencia 316

3.4.22.3. Operación En Modo SLEEP 316

3.4.22.4. Efectos De Un Reset 316

3.4.21.6. Interrupciones Del Comparador

3.4.21.9. Consideraciones En La Conexión De Las Entradas Analógicas

3.4.22.5. Consideraciones De La Conexión

317

3.4.23.

Detector De Alta/Baja Tensión (HLVD)

318

xi

C ONEXIÓN A L P UERTO USB M EDIANTE U N M ICROCONTROLADOR 3.4.23.1. Operación

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

3.4.23.1. Operación

319

3.4.23.2. Configuración Del HLVD

320

3.4.23.3. Consumición De Corriente 321

321

3.4.23.5. Aplicaciones 322

323

3.4.23.7. Efectos De Un Reset 323

3.4.24. Características Especiales De La CPU 324

325

3.4.24.2. Temporizador Del Perro Guardián (WDT) 337

338

3.4.24.3. Arranque A Dos Velocidades 339

3.4.23.4. Tiempo De Arranque De HLVD

3.4.23.6. Operaciones En El Modo Sleep

3.4.24.1. Bits De Configuración

3.4.24.2.1. Registro De Control

3.4.24.3.1. Consideraciones Especiales Para Usar Arranque

 

A

Dos Velocidades

340

3.4.24.4.

Monitor De Reloj A Prueba De Fallos

340

3.4.24.4.1. FSCM Y El Temporizador Perro Guardián

341

3.4.24.4.2. Salir De La Operación A Prueba De Fallos

341

3.4.24.4.3. Interrupciones De FSCM Dentro De Los Modos De Ahorro De Energía

342

3.4.24.4.4. POR O Reinicio Del Sleep

342

3.4.24.5. Verificación Del Programa Y Código De Protección 343

3.4.24.5.1. Memoria De Programa Código De Protección

345

3.4.24.5.2. Datos EEPROM Código De Protección

347

3.4.24.5.3. Configuración Del Registro De Protección

347

3.4.24.6. Localizaciones De Identificación

347

3.4.24.7. Programación Serie In-Circuit

347

3.4.24.8. Depuración In-Circuit 347

3.4.24.9. Características Especiales De Icport (Señalando Paquetes Solamente)

348

3.4.24.9.1. Puerto Dedicado ICD/ICSP

348

3.4.24.9.2. Emulación De 28 Pines 349

349

351

3.4.24.10. Suministro Único De La Programación ICSP

3.5. Fuses De Programación de la Familia PIC18Fxx5x

3.5.1.

PIC18F2455

351

3.5.1.1. Bits Selectores Del Prescaler Del PLL:

 

351

3.5.1.2. Postcaler Del Reloj Del Sistema CPU:

351

3.5.1.3. Bit Selectores Del Reloj Del USB (Modo Full-Speed; UCFG:FSEN=1)

351

3.5.1.4. Bits Selectores Del Oscilador:

 

352

3.5.1.5. Bit De Permiso Del Monitor De Reloj De Seguridad:

352

3.5.1.6. Bit De Cambio Del Oscilador Interno/Externo:

352

3.5.1.7. Bit De Permiso Del Retraso En El Inicio:

352

3.5.1.8. Bit De Permiso Del Reset Por Cese De Tensión (BOR):

353

3.5.1.9. Bits De Tensión BOR:

 

353

3.5.1.10. Bit De Permiso Del Regulador De Tensión USB:

353

3.5.1.11. Bit De Permiso Del Temporizador Watchdog:

353

3.5.1.12. Bits Selectores Del Postscaler Del

Watchdog:

354

3.5.1.13. Bit De Permiso Del Pin MCLR:

354

3.5.1.14. Bit De Permiso De La Potencia Del Oscilador Timer 1:

354

3.5.1.15. Bit De Permiso PORTB A/D:

 

355

3.5.1.16. CCP2 MUX Bit:

355

3.5.1.17. Bit De Permiso Del Reset Por Llenado/Vaciado De La Pila:

355

3.5.1.18. Bit De Permiso Del ICSP:

 

355

3.5.1.19. Bit De Permiso Del Juego De Instrucciones Extendido:

355

3.5.1.20. Bit De Permiso Del Debugger Oculto:

 

355

3.5.1.21. Bit Del Código De Protección En El Bloque 0:

356

xii

GUILLERMO DAVID HERRERO GONZÁLEZ

G UILLERMO D AVID H ERRERO G ONZÁLEZ 3.5.1.22. Bit Del Código De Protecci ón En

3.5.1.22. Bit Del Código De Protección En El Bloque 1:

356

3.5.1.23. Bit Del Código De Protección En El Bloque 2:

356

3.5.1.24. Bit Del Código De Protección En El Bloque De Inicio:

356

3.5.1.25. Bit Del Código De Protección En La EEPROM De Datos:

356

3.5.1.26. Bit De Protección Contra Escritura 0:

 

356

3.5.1.27. Bit De Protección Contra Escritura 1:

356

3.5.1.28. Bit De Protección Contra Escritura 2:

357

3.5.1.29. Bit De Protección Contra Escritura En El Bloque De Inicio:

357

3.5.1.30. Bits De Protección Contra Escritura En Los Registros De Configuración:

357

3.5.1.31. Bits De Protección Contra Escritura En La EEPROM De Datos:

357

3.5.1.32. Bit De Protección De La Lectura De Tabla Del Bloque 0:

357

3.5.1.33. Bit De Protección De La Lectura De Tabla Del Bloque 1:

357

3.5.1.34. Bit De Protección De La Lectura De Tabla Del Bloque 2:

358

3.5.1.35. Protección Contra La Lectura De Tabla Del Bloque De Inicio:

358

3.5.2.

PIC18F2550

358

3.5.2.1. Bits Selectores Del Prescaler Del PLL:

 

358

3.5.2.2. Postcaler Del Reloj Del Sistema CPU:

358

3.5.2.3. Bit Selectores Del Reloj Del USB (Modo Full-Speed; UCFG:FSEN=1)

359

3.5.2.4. Bits Selectores Del Oscilador:

 

359

3.5.2.5. Bit De Permiso Del Monitor De Reloj De Seguridad:

359

3.5.2.6. Bit De Cambio Del Oscilador Interno/Externo:

359

3.5.2.7. Bit De Permiso Del Retraso En El Inicio:

360

3.5.2.8. Bit De Permiso Del Reset Por Cese De Tensión (BOR):

360

3.5.2.9. Bits De Tensión BOR:

 

360

3.5.2.10. Bit De Permiso Del Regulador De Tensión USB:

360

3.5.2.11. Bit De Permiso Del Temporizador Watchdog:

360

3.5.2.12. Bits Selectores Del Postscaler Del

Watchdog:

361

3.5.2.13. Bit De Permiso Del Pin MCLR:

361

3.5.2.14. Bit De Permiso De La Potencia Del Oscilador Timer 1:

361

3.5.2.15. Bit De Permiso PORTB A/D:

 

362

3.5.2.16. CCP2 MUX Bit:

362

3.5.2.17. Bit De Permiso Del Reset Por Llenado/Vaciado De La Pila:

362

3.5.2.18. Bit De Permiso Del ICSP:

 

362

3.5.2.19. Bit De Permiso Del Juego De Instrucciones Extendido:

362

3.5.2.20. Bit De Permiso Del Debugger Oculto:

 

362

3.5.2.21. Bit Del Código De Protección En El Bloque 0:

362

3.5.2.22. Bit Del Código De Protección En El Bloque 1:

363

3.5.2.23. Bit Del Código De Protección En El Bloque 2:

363

3.5.2.24. Bit Del Código De Protección En El Bloque 3:

363

3.5.2.25. Bit Del Código De Protección En El Bloque De Inicio:

363

3.5.2.26. Bit Del Código De Protección En La EEPROM De Datos:

363

3.5.2.27. Bit De Protección Contra Escritura 0:

 

363

3.5.2.28. Bit De Protección Contra Escritura 1:

363

3.5.2.29. Bit De Protección Contra Escritura 2:

364

3.5.2.30. Bit De Protección Contra Escritura 3:

364

3.5.2.31. Bit De Protección Contra Escritura En El Bloque De Inicio:

364

3.5.2.32. Bits De Protección Contra Escritura En Los Registros De Configuración:

364

3.5.2.33. Bits De Protección Contra Escritura En La EEPROM De Datos:

364

3.5.2.34. Bit De Protección De La Lectura De Tabla Del Bloque 0:

364

3.5.2.35. Bit De Protección De La Lectura De Tabla Del Bloque 1:

365

3.5.2.36. Bit De Protección De La Lectura De Tabla Del Bloque 2:

365

3.5.2.37. Bit De Protección De La Lectura De Tabla Del Bloque 3:

365

xiii

C ONEXIÓN A L P UERTO USB M EDIANTE U N M ICROCONTROLADOR 3.5.2.38. Protección

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

3.5.2.38.

Protección Contra La Lectura De Tabla Del Bloque De Inicio:

365

3.5.3.

PIC18F4455

366

3.5.3.1. Bits Selectores Del Prescaler Del PLL:

366

3.5.3.2. Postcaler Del Reloj Del Sistema CPU:

366

3.5.3.3. Bit Selectores Del Reloj Del USB (Modo Full-Speed; UCFG:FSEN=1)

366

3.5.3.4. Bits Selectores Del Oscilador:

367

3.5.3.5. Bit De Permiso Del Monitor De Reloj De Seguridad:

367

3.5.3.6. Bit De Cambio Del Oscilador Interno/Externo:

367

3.5.3.7. Bit De Permiso Del Retraso En El Inicio:

367

3.5.3.8. Bit De Permiso Del Reset Por Cese De Tensión (BOR):

368

3.5.3.9. Bits De Tensión BOR:

368

3.5.3.10. Bit De Permiso Del Regulador De Tensión USB:

368

3.5.3.11. Bit De Permiso Del Temporizador Watchdog:

368

3.5.3.12. Bits Selectores Del Postscaler Del

Watchdog:

369

3.5.3.13. Bit De Permiso Del Pin MCLR:

369

3.5.3.14. Bit De Permiso De La Potencia Del Oscilador Timer 1:

369

3.5.3.15. Bit De Permiso PORTB A/D:

370

3.5.3.16. CCP2 MUX Bit:

370

3.5.3.17. Bit De Permiso Del Reset Por Llenado/Vaciado De La Pila:

370

3.5.3.18. Bit De Permiso Del ICSP:

370

3.5.3.19. Bit De Permiso Del Debug En-Circuito/Puerto De Programación (ICPORT):

370

3.5.3.20. Bit De Permiso Del Juego De Instrucciones Extendido:

370

3.5.3.21. Bit De Permiso Del Debugger Oculto:

370

3.5.3.22. Bit Del Código De Protección En El Bloque 0:

371

3.5.3.23. Bit Del Código De Protección En El Bloque 1:

371

3.5.3.24. Bit Del Código De Protección En El Bloque 2:

371

3.5.3.25. Bit Del Código De Protección En El Bloque De Inicio:

371

3.5.3.26. Bit Del Código De Protección En La EEPROM De Datos:

371

3.5.3.27. Bit De Protección Contra Escritura 0:

371

3.5.3.28. Bit De Protección Contra Escritura 1:

371

3.5.3.29. Bit De Protección Contra Escritura 2:

372

3.5.3.30. Bit De Protección Contra Escritura En El Bloque De Inicio:

372

3.5.3.31. Bits De Protección Contra Escritura En Los Registros De Configuración:

372

3.5.3.32. Bits De Protección Contra Escritura En La EEPROM De Datos:

372

3.5.3.33. Bit De Protección De La Lectura De Tabla Del Bloque 0:

372

3.5.3.34. Bit De Protección De La Lectura De Tabla Del Bloque 1:

372

3.5.3.35. Bit De Protección De La Lectura De Tabla Del Bloque 2:

373

3.5.3.36. Protección Contra La Lectura De Tabla Del Bloque De Inicio:

373

3.5.4.

PIC18F4550

373

3.5.4.1. Bits Selectores Del Prescaler Del PLL:

373

3.5.4.2. Postcaler Del Reloj Del Sistema CPU:

373

3.5.4.3. Bit Selectores Del Reloj Del USB (Modo Full-Speed; UCFG:FSEN=1)

374

3.5.4.4. Bits Selectores Del Oscilador:

374

3.5.4.5. Bit De Permiso Del Monitor De Reloj De Seguridad:

374

3.5.4.6. Bit De Cambio Del Oscilador Interno/Externo:

374

3.5.4.7. Bit De Permiso Del Retraso En El Inicio:

375

3.5.4.8. Bit De Permiso Del Reset Por Cese De Tensión (BOR):

375

3.5.4.9. Bits De Tensión BOR:

375

3.5.4.10. Bit De Permiso Del Regulador De Tensión USB:

375

3.5.4.11. Bit De Permiso Del Temporizador Watchdog:

375

3.5.4.12. Bits Selectores Del Postscaler Del

Watchdog:

376

3.5.4.13. Bit De Permiso Del Pin MCLR:

376

xiv

GUILLERMO DAVID HERRERO GONZÁLEZ

G UILLERMO D AVID H ERRERO G ONZÁLEZ 3.5.4.14. Bit De Permiso De La Potencia Del

3.5.4.14. Bit De Permiso De La Potencia Del Oscilador Timer 1:

376

3.5.4.15. Bit De Permiso PORTB A/D:

377

3.5.4.16. CCP2 MUX Bit:

377

3.5.4.17. Bit De Permiso Del Reset Por Llenado/Vaciado De La Pila:

377

3.5.4.18. Bit De Permiso Del ICSP:

377

3.5.4.19. Bit De Permiso Del Debug En-Circuito/Puerto De Programación (ICPORT):

377

3.5.4.20. Bit De Permiso Del Juego De Instrucciones Extendido:

377

3.5.4.21. Bit De Permiso Del Debugger Oculto:

377

3.5.4.22. Bit Del Código De Protección En El Bloque 0:

378

3.5.4.23. Bit Del Código De Protección En El Bloque 1:

378

3.5.4.24. Bit Del Código De Protección En El Bloque 2:

378

3.5.4.25. Bit Del Código De Protección En El Bloque 3:

378

3.5.4.26. Bit Del Código De Protección En El Bloque De Inicio:

378

3.5.4.27. Bit Del Código De Protección En La EEPROM De Datos:

378

3.5.4.28. Bit De Protección Contra Escritura 0:

378

3.5.4.29. Bit De Protección Contra Escritura 1:

379

3.5.4.30. Bit De Protección Contra Escritura 2:

379

3.5.4.31. Bit De Protección Contra Escritura 3:

379

3.5.4.32. Bit De Protección Contra Escritura En El Bloque De Inicio:

379

3.5.4.33. Bits De Protección Contra Escritura En Los Registros De Configuración:

379

3.5.4.34. Bits De Protección Contra Escritura En La EEPROM De Datos:

379

3.5.4.35. Bit De Protección De La Lectura De Tabla Del Bloque 0:

380

3.5.4.36. Bit De Protección De La Lectura De Tabla Del Bloque 1:

380

3.5.4.37. Bit De Protección De La Lectura De Tabla Del Bloque 2:

380

3.5.4.38. Bit De Protección De La Lectura De Tabla Del Bloque 3:

380

3.5.4.39. Protección Contra La Lectura De Tabla Del Bloque De Inicio:

380

4. Lenguaje De Programación C18

383

4.1. Introducción

383

4.2. Compilador MPLAB C18

383

4.2.1. Introducción

383

4.2.2. Tipos De Datos

384

4.2.2.1. Enteros

384

4.2.2.2. Reales

384

4.2.2.3. Estructuras

385

4.2.2.4. Almacenamiento 385

4.2.2.5. Calificadores 386

4.2.3. Estructuras de Control 386

4.2.3.1.

Repetitivas

386

4.2.3.1.1. Sentencia While

386

4.2.3.1.2. Sentencia Do 387

387

4.2.3.1.4. Sentencia If 387

4.2.3.1.5. Sentencia If-Else 387

4.2.3.1.6. Sentencia Switch 388

388

4.2.3.1.8. Sentencia Continue 388

388

4.2.4. Punteros 389

389

4.2.5. Cadenas De Constantes

4.2.3.1.3. Sentencia

4.2.3.1.7. Sentencia

4.2.3.1.9. Sentencia

For

Break

Goto

xv

C ONEXIÓN A L P UERTO USB M EDIANTE U N M ICROCONTROLADOR 4.3. Librerías

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

4.3. Librerías Del C18

390

4.3.1. Abreviaturas en las librerías de Microchip

390

4.3.2. Adc.H: Librería De Los Conversores A/D

393

4.3.2.1. Descripción De Las Funciones 393

397

4.3.3.1. Descripción De Las Funciones 397

4.3.3. Pwm.H: Funciones Del PWM Y EPWM

4.3.4.

Timers.h: Funciones de los temporizadores

399

4.3.4.1.

Descripción de

las funciones

399

4.3.5.

Delays.H: Retrasos

Por Software

404

4.3.5.1. Descripción De Las Funciones 404

4.3.6.

Librerías del USB

406

4.3.6.1. Usb.h

406

4.3.6.2. Usbcfg.h: Configuración

408

4.3.6.2.1. Definiciones

408

4.3.6.2.2. Uso de la clase del dispositivo

408

4.3.6.2.3. Distribución de los Endpoint

409

4.3.6.3.

Usbdefs_std_dsc.h: Definiciones estándar de los descriptores:

410

4.3.6.3.1. Incluye: 410

4.3.6.3.2. Definiciones

410

4.3.6.3.3. Estructuras

411

4.3.6.4. Usbdsc.h: Descriptores 413

4.3.6.4.1. Librerías que incluye

413

4.3.6.4.2. Definiciones

413

4.3.6.4.3. Externas

413

4.3.6.5.

Usbdefs_ep0_buff.h: Descripciones Del Buffer Del Endpoint 0

414

4.3.6.5.1.

Incluye

414

4.3.6.6.

Usbmmap.h

418

4.3.6.6.1. Incluye

418

4.3.6.6.2. Definiciones

418

4.3.6.6.3. Tipos 419

4.3.6.6.4. Externas

420

4.3.6.7.

Usbdrv.h: Driver Del USB

422

4.3.6.7.1. Incluye

422

4.3.6.7.2. Definiciones

422

4.3.6.7.3. Prototipos públicos

425

4.3.6.8. Usbctrltrf.h: Control de transferencias del USB 426

4.3.6.8.1. Incluye

426

4.3.6.8.2. Definiciones

426

4.3.6.8.3. Externas

426

4.3.6.8.4. Prototipos públicos

426

4.3.6.9.

Usb9.h

427

4.3.6.9.1. Incluye

427

4.3.6.9.2. Definiciones

427

4.3.6.9.3. Prototipos públicos

427

4.3.6.10.

Usbgen.h: USB Genérico

428

4.3.6.10.1. Incluye

428

4.3.6.10.2. Definiciones

428

4.3.6.10.3. Externas

428

4.3.6.10.4. Prototipos Públicos

428

4.3.6.11.

Msd.h: Almacenamiento Masivo

429

4.3.6.11.1. Incluye

429

4.3.6.11.2. Definiciones

429

4.3.6.11.3. Estructuras

432

4.3.6.11.4. Externas

436

xvi

GUILLERMO DAVID HERRERO GONZÁLEZ

G UILLERMO D AVID H ERRERO G ONZÁLEZ 436 4.3.6.12. Cdc.h: Dispositivos De Comuni cación 437

436

4.3.6.12. Cdc.h: Dispositivos De Comunicación 437

4.3.6.11.5. Prototipos públicos

4.3.6.12.1. Incluye

437

4.3.6.12.2. Definiciones

437

4.3.6.12.3. Estructuras

440

4.3.6.12.4. Externas

442

4.3.6.12.5. Prototipos publicos

442

4.3.6.13.

Hid.h: Dispositivo interfaz con humanos

443

4.3.6.13.1. Incluye

443

4.3.6.13.2. Definiciones

443

4.3.6.13.3. Estructuras

444

4.3.6.13.4. Externas

444

4.3.6.13.5. Prototipos públicos

445

4.3.6.14.

Io_cfg.h

445

4.3.6.14.1. Incluye

445

4.3.6.14.2. Tris

445

4.3.6.14.3. USB

445

4.3.6.14.4. LED

446

4.3.6.14.5. Interruptores

446

4.3.6.14.6. Potenciómetro 446

4.3.6.14.7. SPI: Líneas de Chip Select

446

4.3.6.14.8. SDMMC

446

4.3.6.15.

interrupt.h

447

4.3.6.15.1. Incluye

447

4.3.6.15.2. Definiciones

447

4.3.6.15.3. Prototipos

447

4.3.6.16.

Usb_compile_time_validation.h: Validación Del Tiempo De Compilado

448

4.3.6.16.1. Incluye

448

4.3.6.16.2. Validación del USB

448

4.3.7.

Librerías Del Microprocesador

448

4.4. Macros Del Compilador C18

449

4.4.1.

Usbdrv.c: Drivers USB

449

4.4.1.1. Incluye

449

4.4.1.2. Variables 449

4.4.1.3. Prototipos privados 449

449

450

451

4.4.1.4.3. USBModuleDisable(void)

4.4.1.4.4. void USBSoftDetach(void) 451

452

453

453

451

4.4.1.4. Declaraciones

4.4.1.4.1. USBCheckBusStatus(void)

void

4.4.1.4.2. USBModuleEnable(void)

void

void

4.4.1.4.5. USBDriverService(void)

void

4.4.1.4.6. USBSuspend(void)

void

void

4.4.1.4.7. USBWakeFromSuspend(void)

4.4.1.4.8. void USBRemoteWakeup(void) 454

4.4.1.4.9. void USB_SOF_Handler(void)

455

4.4.1.4.10. USBStallHandler(void)

void

455

4.4.1.4.11. USBErrorHandler(void)

void

456

4.4.1.4.12. void USBProtocolResetHandler(void)

456

4.4.1.5.

Función auxiliar

457

4.4.2.

Usb9.c

457

4.4.2.1. Incluye

457

4.4.2.2. Variables 457

4.4.2.3. Prototipos privados 457

xvii

C ONEXIÓN A L P UERTO USB M EDIANTE U N M ICROCONTROLADOR 4.4.2.4. Declaraciones

CONEXIÓN AL PUERTO USB MEDIANTE UN MICROCONTROLADOR

4.4.2.4.

Declaraciones

457

4.4.2.4.1. void

USBCheckStdRequest(void)

457

4.4.2.4.2. void USBStdGetDscHandler(void) 459

4.4.2.4.3.

460

4.4.2.4.4. void USBStdGetStatusHandler(void) 460

void USBStdSetCfgHandler(void)

 

4.4.2.4.5. void USBStdFeatureReqHandler(void)

461

4.4.3.

Usbctrltrf.c

462

4.4.3.1. Incluye

462

4.4.3.2. Variables 462

4.4.3.3. Prototipos privados 462

462

462

463

4.4.3.4.3. USBCtrlTrfSetupHandler(void)

4.4.3.4.4. void USBCtrlTrfOutHandler(void) 464

463

4.4.3.4. Declaraciones

4.4.3.4.1. USBCtrlEPService(void)

void

4.4.3.4.2. USBCtrlTrfSetupHandler(void)

void

void

 

4.4.3.4.5. void

USBCtrlTrfInHandler(void)

464

4.4.3.4.6. void USBCtrlTrfTxService(void)

465

4.4.3.4.7. void USBCtrlTrfRxService(void)

466

4.4.3.4.8. USBCtrlEPServiceComplete(void)

void

466

4.4.3.4.9. USBPrepareForNextSetupTrf(void)

void

468

4.4.4.

Usbdsc.c: Descriptores USB

469

4.4.4.1. Incluye

471

4.4.4.2. Constantes

472

4.4.5.

Usbmmap.c

474

4.4.5.1. Incluye

476

4.4.5.2. Variables globales del USB

476

4.4.5.3. Localizaciones de variables fijas del USB

476

4.4.6.

usbgen.c: USB genérico

479

4.4.6.1. Incluye

479

4.4.6.2. Variables 479

4.4.6.3. Declaraciones

4.4.6.4. API del usuario 479

479

4.4.6.4.1. void

USBGenInitEP(void)

479

4.4.6.4.2. void USBGenWrite(byte *buffer, byte len)

480

4.4.6.4.3. byte USBGenRead(byte *buffer, byte len) 481

4.4.7.

msd.c: USB Almacenamiento Masivo

482

4.4.7.1. Incluye

482

4.4.7.2. Variables 482

4.4.7.3. Protoripos privados 483

4.4.7.4. Declaraciones

483

4.4.7.5. Respuestas específicas de la clase

483

4.4.7.5.1. void USBCheckMSDRequest(void) 483

4.4.7.5.2. void

ProcessIO(void)

484

4.4.7.5.3. void

MSDInitEP(void)

484

4.4.7.5.4. void

SDCardInit(void)

484

4.4.7.5.5. MSDCommandHandler(void)

void

484

4.4.7.5.6. SendCSW(void)

void

484

4.4.7.5.7. void SendData(byte* dataAddr, byte dataSize)

485

4.4.7.5.8. void MSDDataIn(void) 485

4.4.7.5.9. void IsValidCBW() 485

4.4.7.5.10. void IsMeaningfulCBW() 485

485

4.4.7.5.12. MSDInquiryHandler(void)

4.4.7.5.13. void ResetSenseData(void) 485

485

4.4.7.5.11. PrepareCSWData()

void

void

xviii

GUILLERMO DAVID HERRERO GONZÁLEZ

G UILLERMO D AVID H ERRERO G ONZÁLEZ 4.4.7.5.14. 4.4.7.5.15. void MSDReadHandler(void) 486 4.4.7.5.16. 4.4.7.5.17.

4.4.7.5.14.

4.4.7.5.15. void MSDReadHandler(void) 486

4.4.7.5.16.

4.4.7.5.17. void MSDWriteHandler() 486

486

486

void MSDReadCapacityHandler()

void MSDDataOut(void)

4.4.7.5.18. void MSDRequestSenseHandler(void) 486

4.4.7.5.19. MSDModeSenseHandler()

void

486

4.4.7.5.20. MSDMediumRemovalHandler()

void

487

4.4.7.5.21. MSDTestUnitReadyHandler()

void

487

4.4.7.5.22. MSDVerifyHandler()

void

487

4.4.7.5.23. MSDStopStartHandler()

void

487

4.4.8.

cdc.c: USB Dispositivo de comunicación

488

4.4.8.1. Incluye

488

4.4.8.2. Variables 488

4.4.8.3. Declaraciones

488

4.4.8.4. Respuestas específicas de la clase

488

4.4.8.4.1.

void USBCheckCDCRequest(void)

488

4.4.8.5. Api del Usuario 489

 

4.4.8.5.1. void CDCInitEP(void)

489

4.4.8.5.2. byte getsUSBUSART(char *buffer, byte len)

489

4.4.8.5.3. void putsUSBUSART(char *data)

489

4.4.8.5.4. void putrsUSBUSART(const rom char *data)

490

4.4.8.5.5. void

CDCTxService(void)

490

4.4.9.

hid.c: USB interfaz con humanos

491

4.4.9.1. Incluye

 

491

4.4.9.2. Variables 491

4.4.9.3. Prototipos privados 491

4.4.9.4. Declaraciones

491

4.4.9.5. Respuestas específicas de la clase

491

4.4.9.5.1. void USBCheckHIDRequest(void) 491

4.4.9.6. API del usuario 491

491

4.4.9.6.2. void HIDTxReport(char *buffer, byte len) 492

4.4.9.6.3. byte HIDRxReport(char *buffer, byte len) 492

4.4.10. main.c 493

493

4.4.10.2. Variables 493