Você está na página 1de 228

USB: Implementao de

Hardware e Software
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 2
Objetivos
- Os participantes iram obter ao termino do
curso:
-Entendimento de como a USB pode ser til em
sistemas embarcados
-Aprender sobre os fundamentos do protocolo e
arquitetura USB
-Estar ciente dos fatores importantes para o
projeto de aplicaes USB
-Aprender as principais potencialidades
USB dos microcontroladores PICmicro

2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 3


No principio era o PC...
Mas o PC estava s,
entao criou-se a Serial
e a Paralela
E ELE viu que era bom...
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 4
Entao veio
AQUELE homem
com suas
janelas
A interface USB se
tornou padrao
E um periodo de
trevas se sucedeu.
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 5
E vendo o
sofrimentos dos
programadores, a
Microchip disse:
- Que haja o PIC
USB!
E tudo se clareou!
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 6
Agenda
- Breve historia do USB e USB-IF
- Fundamentos USB - A parte sria e importante
- Overview e Comparao de velocidades
- Arquitetura
- Classe de dispositivos
- Interface fsica e conectores
- Tipos de transferncias de dados
- Transaes USB
- Frame USB
- Enumerao
- Descriptors
- Modulo USB do PIC18F4550
- PICDEM Board Full-Speed USB & Microchip USB
Firmware
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 7
Um pequeno histrico...
- USB foi co-desenvolvido por um grupo de
empresas:
- Compaq
- Intel
- Microsoft
- NEC
- 1998 - USB 1.1
- 2000 - USB 2.0
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 8
- http://www.usb.org
- Vendor ID (VID) nmero de 16-bits
- Necessrio para vender seu produto.
- http://www.usb.org/developers/vendor/
- $1,500
- Problemas Tcnicos & Legais se no usar seu prprio VID
- Product ID (PID) nmero de 16-bits
- Numero de identificao do produto
USB Implementers Forum (USB-IF)
- Teste de conformidade
- Produto deve passar no teste
para usar o logo USB.
- ~ $1,500
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 9
Agenda
- Breve historia do USB e USB-IF
- Fundamentos USB - The parte seria e importante
- Overview e Comparao de velocidades
- Arquitetura
- Classe de dispositivos
- Interface fsica e conectores
- Tipos de transferncias de dados
- Transaes USB
- Frame USB
- Enumerao
- Descriptors
- Modulo USB do PIC18F4550
- PICDEM Board Full-Speed USB & Microchip USB
Firmware
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 10
Universal Serial Bus
Computador
timo:
Poder de
processamento!
Anlise de Dados,
Log de dados,
Updates de
firmware,
Diagnstico
Auto deteco & configurao (Plug&Play)
Fcil expanso usando hubs
Alimentao pelo barramento (100mA ou
500mA @ 5V
Trs velocidades :
Low- 1.5, Full- 12, High- 480
Megabits/segundo
Serial
Paralela
PS/2
Aplicao
embarcada
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 11
Comparao: Barramentos
& Velocidades
1394-Fire Wire
1Gb 1Gb 480Mb/s 480Mb/s 100Mb/s 100Mb/s 12Mb/s 12Mb/s 1.5Mb/s 1.5Mb/s 1Mb/s 1Mb/s 500Kb/s 500Kb/s
Ethernet
Porta Serial
LS-USB
1.5 Mb/s
FS-USB
12 Mb/s
HS-USB
480 Mb/s
USB 1.1
USB 2.0
Porta Paralela
WiFi (b/g)
CAN
No precisa
suportar High
Speed para ter
conformidade com
USB 2.0
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 12
Maior Mito
- Mito: Um perifrico USB Full-Speed pode transferir
dados at 1.5 MB/s (12 Mb/s)
- FATO: Impossvel, 1.5 MB/s a largura de banda total
do barramento.
- Deve ser compartilhada entre os perifricos.
- Overhead do protocolo.
- Restries do protocolo.
- Uma razo realista de dados brutos de ~1.0 MB/s.
- Em muitos casos somente 64 KB/s.
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 13
Prximo Maior Mito
- MITO: Um perifrico USB Low-Speed pode
transferir dados ate 187.5 KB/s (1.5 Mbps)
- FATO: Impossvel, por causa de uma restrio
da especificao USB:
- Uma transferncia de 8-byte de dados a
cada 10 ms
- = 800 Bytes/segundo
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 14
Ponto Chave: Velocidades
PIC18F4550
Full-Speed & Low-Speed
PIC16C7X5
Somente Low-Speed
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 15
Agenda
- Breve historia do USB e USB-IF
- Fundamentos USB - The parte seria e importante
- Overview e Comparao de velocidades
- Arquitetura
- Classe de dispositivos
- Interface fsica e conectores
- Tipos de transferncias de dados
- Transaes USB
- Frame USB
- Enumerao
- Descriptors
- Modulo USB do PIC18F4550
- PICDEM Board Full-Speed USB & Microchip USB
Firmware
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 16
USB Architecture
Controlador USB Host
& Hub Raiz
Hub Hub
Hub Hub
Hub Hub
Hub Hub
Hub Hub
Falantes
Logger
de dados
Analisador
Lgico
Hub Hub
At 126 perifricos...
Teclado
Hub: Mximo em cadeia
= 5
As MCUs PICmicro
com USB so
perifricos!
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 17
Categorizing USB Peripherals
Joystick
Mouse
Hard Drive
Externo
ICD2
Drive DVD
Externo
Data Glove
Teclado
Modem
Adaptador
Ethernet
Classe Human Interface Device
(HID)
Classe Mass Storage
Device (MSD)
Classe Communication
Device (CDC)
Classe Custom
(Vendor Class)
Muito mais classes.
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 18
Physical Interface
- Codificao de dados NRZI (Non Return to Zero Inverted)
- Alimentao pelo Barramento para cada dispositivo:
- 4.40 - 5.25 V
- Garantido 100 mA
- No Maximo 500 mA Maximo atravs
de negociao.
~ 5.0 V
~ 3.3 V
Deve usar
alimentao externa
se mais for
necessrio.
V
BUS
D+
D-
GND
V
BUS
D+
D-
GND
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 19
Planejamento de Alimentao
- A corrente mxima do modo suspend da USB
de 2.5mA
- No faa:
Cabo de
alimentao
da USB
V
D D
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 20
Power Planning
- A corrente mxima do modo suspend da USB
de 2.5mA
- Faa assim:
Cabo de
alimentao
da USB
V
D D
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 21
Conector mini-B
FS, HS Peripheral
Conector B
FS, HS Peripheral
USB Connectors
Conector A
USB Host
Perifrico LS
Direto no cabo
ou
conector
custom
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 22
Agenda
- Breve historia do USB e USB-IF
- Fundamentos USB - The parte seria e importante
- Overview e Comparao de velocidades
- Arquitetura
- Classe de dispositivos
- Interface fsica e conectores
- Tipos de transferncias de dados
- Transaes USB
- Frame USB
- Enumerao
- Descriptors
- Modulo USB do PIC18F4550
- PICDEM Board Full-Speed USB & Microchip USB
Firmware
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 23
Diferente aplicaes tem
Diferente aplicaes tem
diferentes necessidades
diferentes necessidades
Como o USB pode preencher
Como o USB pode preencher
estas diferentes requisies?
estas diferentes requisies?
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 24
A Arquitetura USB compreende 4 tipos bsicos de transferncias
de dados:
- Control Dados de Controle so usados para
configurar o dispositivo na primeira
conexo
Tipos de Transferncia de
Dados
Latencies Garantida Integridade dos
Dados Garantida
Interrupt
Interrupt Interrupt
Bulk
Bulk Bulk
Isochronous
Isochronous Isochronous
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 25
Exemplos de Transferncias
Mouse
Falantes
Impressora
Control
+
Interrupt
Control
+
Bulk
Control
+
Isochronous
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 26
Taxa de Transferncia
Terica Mxima Terica Por
Endpoint
24
832
0.8
64
1216
1023
0
200
400
600
800
1000
1200
1400
KByte/s
Control Interrupt Bulk Iso
Tipo de transferencia
Low
Full
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 27
Ponto Chave: Tipos de
Transferncia
PIC18F4550 e familia
Control, Interrupt, Bulk, Isochronous
PIC16C7X5
Somente Control e Interrupt
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 28
Como o Host e o Device
(perifrico) se comunicam?
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 29
Um Endpoint um Buffer
RAM
Endpoint 1 OUT
RAM
Endpoint 1 IN
- - Mximo nmero de endpoints possveis por dispositivo na Mximo nmero de endpoints possveis por dispositivo na
especificao USB: especificao USB:
- - 16 OUT endpoints + 16 IN endpoints = 32 endpoints 16 OUT endpoints + 16 IN endpoints = 32 endpoints
- - PIC18F4550 suporta at 32 endpoints PIC18F4550 suporta at 32 endpoints
- - EP0 = Canal de Comunicao Padro EP0 = Canal de Comunicao Padro
Reservatrio de
Dados
Transao
LED
Teclas
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 30
Transao USB
TokenPacket
TransaoUSB
Especfica:
O endereo do dispositivo
alvo
O nmero Endpoint
A direo da transferncia
OstiposdetokensSETUP e
OUT informamodispositivo
"alvoqueohostdesejaenviar
dados
OtokentipolN informao
dispositivoalvoqueohost
desejareceberdados
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 31
Transao USB - IN
lN TokenPacket
DataPacket
TransaoUSB
O dispositivo alvo retorna dados
iguais ou menores que o tamanho do
endpoint especificado no descriptor
Um signal especial indica o fim do
pacote (EOP)
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 32
Transao USB - IN
lN TokenPacket
DataPacket
HandshakePacket
TransaoUSB
Acknowledge - ACK
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 33
Outro exemplo de
transao...
1. Eu quero RECEBER dados. [IN]
2. Aqui esto os DADOS.
[0x30,0x43,0x48,0x35]
3. Pequei! [ACK]
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 34
Transao USB - OUT &
SETUP
OUT orSETUP Token
Packet
DataPacket
HandshakePacket
TransaoUSB
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 35
Transao USB -
Transferncia tipo Isochronous
TokenPacket
DataPacket
HandshakePacket
TransaoUSB
A transferncia isocrona
no garante a
integridade dos dados.
Ento no h o pacote
de handshake.
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 36
Ponto Chave: Tipos de
Token
SETUP
OUT
IN
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 37
Frame USB: 1 ms
- Propsito: Gerenciamento da largura de banda
- Prioridade do uso do Frame:
- Isochronous & Interrupt: 90%
- Control: 10%,
- Bulk: O que sobrou...
SOF
1 ms 1 ms 1 ms
SOF SOF
Int
EP1
Bulk
EP2
Bulk
EP2
Int
EP1
Int
EP1
Bulk
EP2
Start Of Frame
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 38
Agenda
- Breve historia do USB e USB-IF
- Fundamentos USB - The parte seria e importante
- Overview e Comparao de velocidades
- Arquitetura
- Classe de dispositivos
- Interface fsica e conectores
- Tipos de transferncias de dados
- Transaes USB
- Frame USB
- Enumerao
- Descriptors
- Modulo USB do PIC18F4550
- PICDEM Board Full-Speed USB & Microchip USB
Firmware
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 39
Diga-me a magia por trs do
"Plug&Play"
Auto-Deteco
&
Auto-Configurao
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 40
PlC18F4550 PlC18F4550 PlC18F4550 PlC18F4550
Auto-Deteco : Full-Speed
+5V
D+
D-
GND
Transceiver Transceiver Transceiver Transceiver
Conector
USB
Dispositivotipoperifrico Dispositivotipoperifrico Dispositivotipoperifrico Dispositivotipoperifrico
V VV V
USB USB USB USB
3.3V 3.3V 3.3V 3.3V
Identificao Full Speed:
pull-up na linha D+
1.5k5%
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 41
PlC18F4550 PlC18F4550 PlC18F4550 PlC18F4550
Auto-Deteco : Low-Speed
+5V
D+
D-
GND
Transceiver Transceiver Transceiver Transceiver
Identificao Low Speed:
pull-up na linha D-
1.5k5%
Dispositivotipoperifrico Dispositivotipoperifrico Dispositivotipoperifrico Dispositivotipoperifrico
V VV V
USB USB USB USB
3.3V 3.3V 3.3V 3.3V
Conector
USB
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 42
PlC18F4550 PlC18F4550 PlC18F4550 PlC18F4550
Novo! Resistores de Pull-up
internos!
+5V
D+
D-
GND
Transceiver
V
USB
3.3 V
Resistores de Pull-up
internos!
Controle pelo UCFG<UPUEN>
& UCFG<FSEN>
Dispositivotipoperifrico Dispositivotipoperifrico Dispositivotipoperifrico Dispositivotipoperifrico
Conector
USB
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 43
PICmicro

MCU: Detecting a USB Attachment


Cabo de
Alimentao
USB
V
D D
I/O
Alimentao
separada
Se o dispositivo tiver alimentao
separada, DEVE-SE usar um pino de
I/O para detectar a conexo do cabo.
Isso necessrio para
habilitar/desabilitar o modulo USB e
no permitir que os resistores de pull-
up de D+/D- fiquem ativos antes da
conexo do cabo, conforme requerido
na especificao USB 2.0 - 7.1.5
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 44
Endpoint 0 e Enumerao
- Veja o Capitulo 9 na espec. USB 2.0 Spec p/
mais info.
Outros
Endpoints
Endpoint 0 IN
(Control Data)
Endpoint 0 OUT
(Control Data)
Dual-Port Ram
PIC18F4550
Descriptors
Control Transfer
Bus Reset Set Address
Get
Descriptor
Set
Configuration
Device
Ready
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 45
Descriptors
Device
Configuration 1
Interface 0
Endpoint
Interface 1
Endpoint Endpoint Endpoint
P/ outras Configurations se
houverem
P/ outras interface
se houverem
String 0
String 1
String N
- Descriptors devem ser armazenados em uma memria no
voltil. No PIC18F4550, descriptors devem ser armazenados na
memria flash.
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 46
Vamos USB!
MCHP
Examplo de Descriptors
Device
Configuration 1
Interface 0
Endpoint
String 0
String 1
USB 2.0, VID = 0x04D8,
PID = 0x0007, 1 Configuration, String 0
Configuration #1, Bus-Powered,
100mA, 1 Interface
Interface #0, String 1
Endpoint 1 IN, Interrupt Transfer Type,
64-byte buffer, Poll every 10 ms
Characteres
Unicode
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 47
Agenda
- Breve historia do USB e USB-IF
- Fundamentos USB - The parte seria e importante
- Overview e Comparao de velocidades
- Arquitetura
- Classe de dispositivos
- Interface fsica e conectores
- Tipos de transferncias de dados
- Transaes USB
- Frame USB
- Enumerao
- Descriptors
- Modulo USB do PIC18F4550
- PICDEM Board Full-Speed USB & Microchip USB
Firmware
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 48
Famlia PIC18F4550
- RAM
- 2 Kbytes
- Na qual at 1 Kbytes pode
ser usado para os buffers
USB
- EEPROM
- 256 bytes
- 48 MHz - 12 MIPs
- Porta ICD2 Dedicada
(somente em 44 pinos)

28-Pin 40/44-Pin
32 KB PIC18F2550 PIC18F4550
24 KB PIC18F2455 PIC18F4455
16 KB PIC18F2450 PIC18F4450

- USB 2.0 Full-Speed
- Tecnologia nanoWatt
- Enhanced Flash
- I
2
C/SPI, EUSART
- ADC de 10-bit
- 1xECCP + 1xCCP
- Faixa de Tenso de
Operao:
- 2.0 - 5.5 V
- >= 3.3 V quando
usando USB
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 49
PIC18F4550
D+/D-
Mdulo USB
Placa do dispositivo tipo perifrico
SIE
Program
Memory
USB RAM
Control
Registers
Data RAM
Transceiver
Regulador de
3.3 V
Interface p/
Transceiver Externo
Streaming Parallel
Port (DMA)
Bus Pull-Up
Resistors
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 50
PIC18F4550
D+/D-
Serial Interface Engine
SIE
Transceiver
SIE ...
Serializa e deserializa os
dados USB
Codifica e decodifica dados
em NRZI
Controla o bit stuffing
Verifica o CRC p/ validar os
pacotes de dados
Detecta eventos o
barramento e notifica a CPU
atraves de interrupes
Controla as transaes USB
Controla o protocolo de
handshaking
Program
Memory
USB RAM
Control
Registers
Data RAM
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 51
Organizao da Memria de
Dados
1024 bytes da RAM USB Dual-Port
000h
Dados da USB ou
Dados do Usurio
No usado
SFRs
3FFh
400h
7FFh
F60h
FFFh
Dados do Usurio
2048 bytes de RAM Total
Mecanismo de semforo de 1-bit
SIE v.s. CPU
1024 bytes da RAM de uso geral
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 52
C
l
o
c
k
s

d
o

S
i
s
t
e
m
a
Necessrio p/ USB
SIE
FS: 48 MHz
LS: 6 MHz
CPU
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 53
PIC18F4550
Examplo de Configurao de
Clock
SIE
20 MHz EC Divide p/ 5 96 MHz PLL
Divide by 2
Divide p/ 2
PIC

MCU
Core
Aceita SOMENTE 4 MHz
de Entrada!
SIE Clock = 48 MHz : Full-Speed Mode
48 MHz :
12 MIPs
Placa do dispositivo tipo perifrico
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 54
PIC18F4550
Resumo
- Confome com USB 2.0
- Suporta low-speed (1.5 Mb/s) e full-speed (12 Mb/s)
- Suporta transferncias control, interrupt, bulk, e isochronous
- Suporta at 32 endpoints
- 1 KB de RAM Dual-Port p/ USB
- Transceiver USB e voltage regulator internos
- Resistores internos de pull-up p/ as linhas D+ and D-
- Interface para transceiver USB externo
- Streaming Parallel Port (SPP) p/ transferncias USB streaming
(somente nos de 40 e 44 pinos)
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 55
Agenda
- Breve historia do USB e USB-IF
- Fundamentos USB - The parte seria e importante
- Overview e Comparao de velocidades
- Arquitetura
- Classe de dispositivos
- Interface fsica e conectores
- Tipos de transferncias de dados
- Transaes USB
- Frame USB
- Enumerao
- Descriptors
- Modulo USB do PIC18F4550
- PICDEM Board Full-Speed USB & Microchip USB
Firmware
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 56
Hardware - Dual Port Ram, USB SFRs
Microchip USB
Firmware Stack
Mass Storage HID
Communication
(RS-232
Emulation)
User Application
SD Disk (SPI)
File System (FAT)
USB Driver & Chapter 9 Firmware
Secure Digital Card
- Driver Nativo para Windows: Microchip USB
- Driver Nativo para Windows: Microchip USB
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 57
Caractersticas:
Microchip USB Firmware
- Compatvel com C18
- Desenvolvido como um Projeto do MPLAB

IDE
- Esquema de polling
- Multi-Tasking cooperativo (Sem rotinas
bloqueadoras)
- Uso da Memria de Programa
- USB Hardware Driver & Capitulo 9 - 2 KB
- HID 1 KB
- CDC (Emulao RS-232) 1 KB
- USB Mass Storage 4 KB
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 58
Gerenciamento do Firmware
USB
_output autofiles
hid msd cdc
class usb9
usb
FAT
filesys
SD CF
disks
system user
Project Root Directory
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 59
Autofiles
USB Firmware
Auto
Generated
Fixed
Firmware
Microchip USB
Wizard Program
User
Firmware
HEX
Compile & Link
PIC18F4550
Program
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 60
Multitasking Cooperativo
Loop Principal
Task A
900 us
Task A.3 - 300 us
Task B - 100 us
Task A.2 - 400 us
Task A.1 - 200 us
Max Loop Time
1000 us vs. 500 us
Mquina de
estados
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 61
Colocando tudo junto...
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 62
Usando vs. Criando uma
Device Class
EP15
PIC18F4550
Control Transfer
(SETUP,
OUT, IN)
...
EP1
EP0
Interrupt
Bulk
Isochronous
(OUT, IN)
Chapter9
Device
Class
User
Application
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 63
O que sua aplicao precisa?
- HID
- CDC - Emulao RS-232
- General Purpose
- MSD
- Outras..?
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 64
Human Interface Device (HID)
PC Computer
PIC

Cabo USB
HID App HID\Mouse Drivers Padro do Windows
Consideraes de projeto: Consideraes de projeto:
64 KB/s max 64 KB/s max
Transferncias Tipo Interrupt Transferncias Tipo Interrupt
Driver Padro do Windows Driver Padro do Windows
So aplicaes PC custom podem acessar os So aplicaes PC custom podem acessar os
dados do HID atravs das APIs Win32 dados do HID atravs das APIs Win32
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 65
CDC - Emulao RS-232
PC Computer
PIC

Cabo USB
Hyper Terminal CDC
Precisa do
Arquivo INF
Drivers Padro do Windows
Consideraes de projeto: Consideraes de projeto:
~80 KB/s max ~80 KB/s max
Funciona bem no XP, desempenho limitado no Funciona bem no XP, desempenho limitado no
2000 e sem suporte para o 98 (no USB.org tem 2000 e sem suporte para o 98 (no USB.org tem
algums drives) algums drives)
Aplicativos PC podem acessar o dispositivo como Aplicativos PC podem acessar o dispositivo como
se estivesse conectado a uma porta serial. se estivesse conectado a uma porta serial.
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 66
Caminho de migrao
HyperTerminal
Driver da UART
Hardware UART
Hardware UART
APIs da UART
Aplicao em
Firmware
RS-232
HyperTerminal
Driver da UART
Hardware USB
Hardware USB
APIs USB UART
Aplicao em
Firmware
USB
Driver CDC
PIC18F4550
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 67
Drivers para Windows 2000 e
Windows XP
- Os drivers CDC no tem um arquivo .inf padro.
Entretanto, os drivers fazem parte da instalao
do Windows.
- Somente necessrio prover o arquivo .inf na
primeira conexo do dispositivo.
- Exemplos de arquivos .inf files esto no diretrio
do "CDC RS-232 Emulation Reference Project
localizado apos instalados no diretrio
<Install>\fw\CDC\inf
- Antes de us-los, modifique-os para usar o VID e
PID especifico da aplicao, alem de quaisquer
modificaes feitas no usbdsc.c que devem
refletir estes valores.
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 68
API da CDC
void putrsUSBUSART(const rom char *data);
void putsUSBUSART(char *data);
void mUSBUSARTTxRom(rom byte *pData, byte len);
void mUSBUSARTTxRam(byte *pData, byte len);
byte getsUSBUSART(char *buffer, byte len);
byte mCDCGetRxLength(void);
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 69
Determinaes da API
- Voc sabe o tamanho dos dados que
se deseja enviar?
- Esto armazenado em ROM ou RAM?
- A string de dados terminada em
null (final com 0x00)?
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 70
Exemplo de Fluxo do Programa
Reset main InitializeSystem
MainLoop
user.c
Exercise_01();
Exercise_02();

USBTasks()
ProcessIO()
main.c
USBDriverService();
CDCTxService();

Multitasking
Cooperativo!!
SEM funes
bloqueadoras.
Use mquinas
de estado.
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 71
API p/ dados terminados em
null: literal & ROM
void putrsUSBUSART(const rom char *data);
void putsUSBUSART(char *data);
void mUSBUSARTTxRom(rom byte *pData, byte
len);
void mUSBUSARTTxRam(byte *pData, byte len);
byte getsUSBUSART(char *buffer, byte len);
byte mCDCGetRxLength(void);
Use putrs p/ literal e dados em ROM
Examplo de Uso :
putrsUSBUSART(Hello);
ou
putrsUSBUSART(welcome);
onde
rom char welcome[]=(Bye);
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 72
Exemplo 1: envio dados literais
void Exercise_01(void)
{
if(Switch2IsPressed())
{
if(mUSBUSARTIsTxTrfReady())
{
putrsUSBUSART(Hello World!\r\n);
}
}
}
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 73
Exerccio 2.2:
Enviando dados em ROM
- Encontre a funo Exercise_02() em user.c
- Escreva um cdigo para esta funo que
envie uma string de dados literais
terminados em null armazenado a na
memria de programa apontado por
"ex02_string" para o PC quando a chave 3
pressionada
- Funes teis :
BOOL Switch3IsPressed(void);
BOOL mUSBUSARTIsTxTrfReady(void)
- Uso: putrsUSBUSART()
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 74
Exemplo 2: envio dados em ROM
rom const ex02_string USB e Microchip;
...
void Exercise_02(void)
{
if(Switch3IsPressed())
{
if(mUSBUSARTIsTxTrfReady())
{
putrsUSBUSART(ex02_string);
}
}
}
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 75
APIs p/ receber dados
void putrsUSBUSART(const rom char *data);
void putsUSBUSART(char *data);
void mUSBUSARTTxRom(rom byte *pData, byte
len);
void mUSBUSARTTxRam(byte *pData, byte len);
byte getsUSBUSART(char *buffer, byte len);
byte mCDCGetRxLength(void);
len = nmero de dados esperados
buffer = ponteiro para o buffer de
tamanho >= a len
getsUSBUSART retorna o nmero de
bytes copiados para o buffer
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 76
Exerccio 2.3: Recebendo
dados
- Encontre a funo Exercise_03() em user.c
- Escreva um cdigo para esta funo que l
dados da USB e alterna o LED D4 quando o
dado lidos for igual ao caractere ASCII '1'
(0x31)
- Funes teis & variveis:
input_buffer[];
mLED_4_Toggle();
- Uso: getsUSBUSART()
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 77
Exemplo 3: recebendo dados
void Exercise_03(void)
{
if(getsUSBUSART(input_buffer, 1))
{
if(input_buffer[0] == 1)
mLED_4_Toggle();
}
}
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 78
APIs para dados de
comprimento conhecido
void putrsUSBUSART(const rom char *data);
void putsUSBUSART(char *data);
void mUSBUSARTTxRom(rom byte *pData, byte
len);
void mUSBUSARTTxRam(byte *pData, byte len);
byte getsUSBUSART(char *buffer, byte len);
byte mCDCGetRxLength(void);
Use mUSBUSARTTxRom p/ dados
armazendado na memria de
programa
Use mUSBUSARTTxRam p/ dados
armazendado na memria de dados
255-bytes no
mximo
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 79
Exercise 2.4: Sending non
null-terminated data
- Antes, comente a chamada para
Exercise_01() em ProcessIO().
- Encontre a funo Exercise_04() em user.c
- Escreva um cdigo para esta funo que
envie os seguintes 4 bytes de dados:
0x30,0x31,0x32,0x33 quando a chave 2
pressionada
- Funes teis & variveis:
Switch2IsPressed();
BOOL mUSBUSARTIsTxTrfReady(void)
output_buffer[];
- Us0: mUSBUSARTTxRam()
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 80
Exemplo 4: enviando dados no
terminados em null (0x00)
void Exercise_04(void)
{
if(Switch2IsPressed())
{
if(mUSBUSARTIsTxTrfReady())
{
output_buffer[0]=0x30;
output_buffer[1]=0x31;
output_buffer[2]=0x32;
output_buffer[3]=0x33;
mUSBUSARTTxRam((byte*)output_buffer,4);
}
}
}
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 81
API para dados em RAM
terminados em null
void putrsUSBUSART(const rom char *data);
void putsUSBUSART(char *data);
void mUSBUSARTTxRom(rom byte *pData, byte
len);
void mUSBUSARTTxRam(byte *pData, byte len);
byte getsUSBUSART(char *buffer, byte len);
byte mCDCGetRxLength(void);
Use puts para dados na RAM
Exemplo de Uso :
putsUSBUSART(output_buffer);
onde
char output_buffer[]=(Microchip);
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 82
Exerccio 2.5: Dados de
Temperatura
- Encontre a funo Exercise_05() em user.c
- O programa atualmente envia dados de
temperatura na porta UART fsica.
Modifique o programa para enviar os dados
atravs da porta USB.
- Siga as instrues do Exercise_05()
Use mUSBUSARTIsTxTrfReady()
Use putsUSBUSART(...)
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 83
O que est errado com este
cdigo?
Ele no verifica:
if(mUSBUSARTIsTxTrfReady())
void Exercise_XX(void)
{
putrsUSBUSART(Hello World!);
}
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 84
O que est errado com este
cdigo?
Resposta:
Funo
bloqueadora! No
boa para
multitasking
cooperativo.
CDCTxService() em
USBTasks() nunca
ser chamada, e
cdc_trf_state nunca
ser atualizado.
O Programa ir
travar em um loop.
Lembre-se, use
uma mquina de
estados!
void Exercise_XX(void)
{
while(!mUSBUSARTIsTxTrfReady());
putrsUSBUSART(Hello World!);
}
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 85
Exemplo 5
void Exercise_05(void)
{
static word ex05_count;
if(ex05_count == 0)
{
AcquireTemperature();
UpdateCelsiusASCII();
if(mUSBUSARTIsTxTrfReady())
{
putsUSBUSART(tempString);
ex05_count = 10000;
}
}
else
ex05_count--;
}//end Exercise_05
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 86
Importncia de verificar o
estado
- cdc_trf_state
- CDC_TX_READY
- CDC_TX_BUSY
- CDC_TX_BUSY_ZLP
- CDC_TX_COMPLETING
- Quando chamar a API que envia dados para o
host, deve-se verificar que:
cdc_trf_state == CDC_TX_READY
- Ou usar a macro:
BOOL mUSBUSARTIsTxTrfReady(void);
Returna 1 quando o estado
CDC_TX_READY
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 87
Analise do exerccio
- Velocidade
- 640 Kbits/s = 80 Kbytes/s
- Mais rpido que a RS-232 (UART)
- Esta soluo no possvel com USB
low-speed porque este no tem o
endpoint bulk.
- Sem handshakes por hardware
- Uso da Memria de Programa : ~ 3 KB
- Application Note
- AN956: Migrating Applications to USB from RS-
232 UART with Minimal Impact on PC Software
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 88
Mass Storage Device (MSD)
PC Computer PIC

Cabo USB
Windows
Explorer
MSD Drivers Padro do Windows
Consideraes de projeto : Consideraes de projeto :
Funciona como um disk drive Funciona como um disk drive
Rpida transferncia de dados atravs da USB Rpida transferncia de dados atravs da USB
Velocidade limitada dependendo do tipo de Velocidade limitada dependendo do tipo de
midia fsica midia fsica
Para se utilizvel, O sistema de arquivos deve se Para se utilizvel, O sistema de arquivos deve se
implementado em firmware implementado em firmware
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 89
Tpica Aplicao MSD
Seu Aplicativo
Abrir, Salvar, Ler,
Escrever, Deletar
File System
Driver USB Mass
Storage
Driver USB Bus
Hardware USB Host
PIC18F4550
USB Physical
Interface
USB Chapter 9
Firmware
Mass Storage Driver
Firmware
Physical Disk Driver
Firmware (Shared)
Seu Aplicativo
Secure Digital,
Compact Flash,
etc.
File System Firmware
PC USB Peripheral
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 90
Driver General Purpose
PC Computer PIC

Cabo USB
MCHPUSB.sys
Somente
Binrio
MPUSBAPI.dll
Fonte e
binrio
Boot
Demo
PDFSUSB.exe
Binary Only
Other C++
Examples
Source and
Binary
Consideraes de projeto: Consideraes de projeto:
~1,088 KB/s max ~1,088 KB/s max
Muito flexivel Muito flexivel
No um driver padro do Windows No um driver padro do Windows
Programao no PC necessria Programao no PC necessria
MPUSBAPI.DLL
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 92
Host
Client Software
USB Host
Controller/Hub
(Hardware)
Cabo USB
Dispositivo
usando
PIC18F4550
Host
MPUSBAPI.DLL
USB System
Software
(USB Driver, Host
Controller Driver)
Aplicaes de
usurios
Win32 Subsystem
& DLLs de usurios
Software Cliente
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 93
Host
Software Cliente
USB Host
Controller/Hub
(Hardware)
Cabo USB
Dispositivo
usando
PIC18F4550
Host
MPUSBAPI.DLL
USB System
Software
(USB Driver, Host
Controller Driver)
Aplicaes de
usurios
Win32 Subsystem
& User DLLs
MPUSBAPI.DLL
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 94
Introduo - MPUSBAPI.DLL
- DLL - Dynamic Link Library
- Cdigo encapsulante para mchpusb.sys
- Simplifica o desenvolvimento de
aplicaes com a mchpusb.sys
- Prove funes simples
- Pode ser usada para acessar endpoints
Bulk, Isochronous e Interrupt
- As funes podem ser chamadas pelo
VC++, BCB, VB.NET facilmente.
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 95
Introduo s DLLs
- O que uma biblioteca?
- "Linkagem Esttica
- "Linkagem Dinmica
- "Linkagem Load-time
- "Linkagem Run-time
- DLLs
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 96
DLLs - Usando DLLs
- DLLs so usadas de 2 maneiras:
- "Linkagem Load-Time
- "Linkagem Run-Time
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 97
DLLs - Usando DLLs
- "Linkagem Load-Time (Usando o arquivo
.LIB)
- Quando o projeto da DLL compilador junto com a
DLL um arquivo .LIB gerado.
- Quando desenvolver uma aplicao que usa a DLL
- Adicione o Header File da DLL (Arquivo .H) aos
arquivos fonte
- Adicione o arquivo .LIB a lista de arquivos de
bibliotecas do Projeto
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 98
DLLs - Usando DLLs
- "Linkagem Run-Time
- Caminho mais complexo, porm permite que as DLLs
sejam carregadas durante a execuo
- Suporte a Win32 API
- HINSTANCE LoadLibrary(LPCTSTR lpLibFileName );
- Carrega uma DLL na memria
- FARPROC GetProcAddress( HMODULE hModule, LPCWSTR
lpProcName/ OrdinalValue );
- Retorna um ponteira para um funo
- BOOL FreeLibrary( HMODULE hLibModule );
- Remove a biblioteca da memria
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 99
Usando a MPUSBAPI.DLL
- Precisa somente do PID/VID e do Nome do Endpoint para
comunicao com o dispositivo USB
- Tcnicas Simples podem ser usadas para interagir com o
deispositivo:
- Usando Polling
- Usando WM_DEVICECHANGE
- Pode realizar operaes de I/O facilmente
- Implementa a maior parte do cdigo especfico do sistema
internamente
- Prove uma API Genrica (Read, Write, Open, Close)
- Disponvel do seguinte diretrio:
- \MCHPFSUSB\Pc\Mpusbapi\Dll\Borland_C
- Cdigo fonte pode ser encontrado em:
- \MCHPFSUSB\Pc\Mpusbapi\Dll\Borland_C\Source
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 100
Usando a MPUSBAPI.DLL
- Pode ser "linkada em load-time ou run-time
- Para "linkagem load-time
- Use a mpusbapi.lib & _mpusbapi.h
- Para "linkagem run-time
- Use LoadLibrary & GetProcAddress em mpusbapi.dll
- Use o mpusbapi.h
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 101
Funes na MPUSBAPI.DLL
Sete Funes simples
MPUSBOpen( .. )
MPUSBClose( .. )
MPUSBReadInt( .. )
MPUSBRead( .. )
MPUSBWrite( .. )
VID & PID
MPUSBGetDeviceCount(..)
MPUSBGetDLLVersion( .. )
VID & PID
Desenvolvimento de aplicaes
usando a MPUSBAPI.DLL
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 103
Load-time Linking
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 104
"Linkagem Load-time com a
MPUSBAPI.DLL
- Objetivo - "linkar MPUSBAPI.DLL no load-time e chamar a
funo a partir da DLL
- Conceitos:
- Uso da MPUSBAPI.DLL para "linkagem no load time
- Compilao do projeto bem sucedida
- Chamar uma funo da DLL "linkada (MPUSBGetDeviceCount)
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 105
Funes usadas
- DWORD MPUSBGetDLLVersion(void)
- Esta funo retorna a verso da DLL
- Valor retornado
- HIWORD(retVal) - Major Version
- LOWORD(retVal) - Minor Version
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 106
Funes usadas
- DWORD MPUSBGetDeviceCount(PCHAR
pVID_PID);
- Esta funo retorna o numero de dispositivos
com o mesmo PID e VID
- Argumentos
- pVID_PID - Vendor ID & Product ID string
- Valor retornado
- Numero de dispositivos conectados com o PID &
VID fornecido
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 107
Funes usadas
- HANDLE MPUSBOpen(DWORD instance, // Input
PCHAR pVID_PID, // Input
PCHAR pEP, // Input
DWORD dwDir, // Input
DWORD dwReserved);// Input <Future Use>
- Esta funo retorna um handle para um end-point do
dispositivo USB com o pVID_PID e pEP especificado.
- O handle retornado um end-point handle
- dwDir - Indica a direo do end-point
- MP_READ - read end point
- MP_WRITE - write end point
- O Valor retornado pode ser INVALID_HANDLE_VALUE
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 108
Funes usadas
- MPUSBOpen continuao:
- pVID_PID
- Tipo de dado: String
- Formato: "vid_xxxx&pid_yyyy"
- xxxx o valor do VID em HEXA
- yyyy o valor do PID em HEXA
- pEP
- Tipo de dado : String
- Formato: "\\MCHP_EPz"
- NOTA:
- Para usar o MPUSBReadInt(), o formato do pEP deve
ser "\\MCHP_EPz_ASYNC"
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 109
Funes usadas
- DWORD MPUSBRead( HANDLE handle, // Input
PVOID pData, // Output
DWORD dwLen, // Input
PDWORD pLength, // Output
DWORD dwMilliseconds); // Input
- Le do end-point IN e preenche um buffer
- Argumentos
- Handle - Handle para o end-point IN
- pData - Buffer
- dwLength - Nmero de bytes a serem lidos
- pLength - Nmero de bytes efetivamente lidos
- dwMilliseconds - Perodo para nova tentativa (retry)
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 110
Funes usadas
- DWORD MPUSBWrite(HANDLE handle, // Input
PVOID pData, // Input
DWORD dwLen, // Input
PDWORD pLength, // Output
DWORD dwMilliseconds); // Input
- Escreve em um end-point OUT usando o buffer pData
- Argumentos
- Handle - Handle para o end-point OUT
- pData - Buffer
- dwLen - Nmero de bytes a serem escritos
- pLength - Nmero de bytes efetivamente escritos
- dwMilliseconds - Perodo para nova tentativa (retry)
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 111
Funes usadas
- DWORD MPUSBReadInt(HANDLE handle, // Input
PVOID pData, // Output
DWORD dwLen, // Input
PDWORD pLength, // Output
DWORD dwMilliseconds); // Input
- Le do end-point Interrupt IN e preenche um buffer
- A aplicao do usurio deve chamar MPUSBReadInt() frequento
o suficiente para evitar perdas de dados
- Argumentos
- Handle - Handle para o end-point IN
- pData - Buffer (ponteiro para um array de inteiros)
- dwLength - Nmero de bytes a serem lidos
- pLength - Nmero de bytes efetivamente lidos
- dwMilliseconds - Perodo para nova tentativa (retry)
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 112
Funes usadas
- BOOL MPUSBClose(HANDLE handle);
- Fecha o handler para um end point
- Argumentos
- Handle - Handle para o end-point
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 113
Algoritmo para Comunicao USB
- USB um Protocolo Controlado pelo Host
- Para Transmitir Dados:
- Abra o Endpoint
- Crie e preencha o Buffer de Transmisso
- Chame MPUSBWrite
- O dispositivo deve consumir os dados do buffer do Endpoint
- Para Receber Dados:
- Abra o Endpoint
- Chame MPUSBRead com o buffer desejado
- O dispositivo ja deve ter colocado os dados no Buffer do
Endpoint
- Feche o Endpoint que foi aberto
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 114
Tratamento de Erros
- Sempre verifique os argumentos
para valores de erro
- Verifique as Variveis para valores
de erro
- MPUSB_SUCCESS, MPUSB_FAIL
- INVALID_HANDLE_VALUE
- GetLastError()
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 115
GetLastError - Alguns cdigos de
erro
- ERROR_INVALID_HANDLE
- ERROR_HANDLE_EOF
- ERROR_IO_PENDING
- ERROR_SUCCESS
- ERROR_FILE_NOT_FOUND
- ERROR_ACCESS_DENIED
- Link:
http://msdn.microsoft.com/library/default.asp?url=/library/en-
us/debug/base/system_error_codes.asp
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 116
Run-time Linking
WM_DEVICECHANGE
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 118
Eventos do Windows
- Windows um OS dirigido a eventos
- Evento: Notificao enviado pelo OS para
a aplicao quando ocorre uma atividade
relacionada a ela
- Eventos so Globais
- Exemplos:
- WM_COMMAND, WM_PAINT
- WM_DEVICECHANGE
- Podem sem tratados pelas aplicaes GUI
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 119
Desenvolvimento de aplicaes
usando a Win32 API
- Estrutura de uma aplicao Win32 API
- Entry Point - WinMain
- Registra com o OS a Janela Principal
e o Event Handler usando as APIS
RegisterClass e as estruturas
WNDCLASS
- Cria uma Janela Principal usando
a API CreateWindow
- Inicia o Message Loop
WinMain WinMain
Chama RegisterClass Chama RegisterClass
(Registra a (Registra a
Main Window Class , Main Window Class ,
Event Handler) Event Handler)
Chama CreateWindow Chama CreateWindow
(Cria a Main Window) (Cria a Main Window)
Recebe Messagem (OS Event) Recebe Messagem (OS Event)
Invoca o Event Handler Invoca o Event Handler
Exit Application Exit Application
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 120
Event Handler - WndProc
- Durante o processo de registro uma Windows
Message Handler Function "WndProc()
associada com a Main Window
- Prottipo:
LRESULT CALLBACK WndProc(HWND hWnd,
unsigned msg, WORD wParam, LONG lParam)
msg - Mensagem recebida pela aplicao
wParam, lParam - Informao especfica da
Menssagem
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 121
WM_DEVICECHANGE
- Notifica uma aplicao de mudanas na configurao do H/W
- Uma Window recebe esta mensagem atravs da funo
WndProc(HWND hWnd, unsigned msg, WORD wParam, LONG
lParam)
- hWnd - Handle da Window
- msg - WM_DEVICECHANGE
- wParam - Event que ocorreu
- DBT_DEVICEARRIVAL
- DBT_DEVNODES_CHANGED
- DBT_CONFIGCHANGECANCELED
- DBT_CONFIGCHANGED etc...
- lParam - Contem um ponteiro para a estrutura que contm os
dados especificos do evento
- Cada evento tem uma estrutura associada definida em C
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 122
WM_DEVICECHANGE
Notificaes
- DBT_CONFIGCHANGECANCELED
- 0x0019 Uma requisio para alterar a configurao atual (dock
ou undock) foi cancelada
- DBT_CONFIGCHANGED
- 0x0018 A configurao atual foi alterada, devido a um dock ou
undock
- DBT_CUSTOMEVENT
- 0x8006 Um evento persolanizado (custom) ocorreu .
- Windows NT 4.0 e Windows 95: Este valor no suportado
- DBT_DEVICEARRIVAL
- 0x8000 Um dispositivo ou pea de mdia foi inserido e esta
disponvel agora
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 123
WM_DEVICECHANGE
Notificaes
- DBT_DEVICEQUERYREMOVE
- 0x8001 requisitada uma permisso para remover um
dispositivo ou pea de mdia; qualquer aplicao pode negar
esta requisio e cancelar a remoo
- DBT_DEVICEQUERYREMOVEFAILED
- 0x8002 Uma requisio para remover um dispositivo ou
pea de mdia foi cancelada.
- DBT_DEVICEREMOVECOMPLETE
- 0x8004 Um dispositivo ou pea de mdia foi removido.
- DBT_DEVICEREMOVEPENDING
- 0x8003 Um dispositivo ou pea de mdia esta para ser
removed; requisio no pode ser negada
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 124
WM_DEVICECHANGE
Notifications
- DBT_DEVICETYPESPECIFIC
- 0x8005 Um evento especifico de um dispositivo ocorreu
- DBT_DEVNODES_CHANGED
- 0x0007 Um dispositivo foi adicionado ou removido do
sistema
- Windows NT 4.0 and Windows Me/98/95: Este valor no
suportado
- DBT_QUERYCHANGECONFIG
- 0x0017 Requisitou-se uma permisso para trocar a
configurao (dock or undock)
- DBT_USERDEFINED
- 0xFFFF O significado desta mensagem definida pelo
usurio
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 125
Example Code
- O cdigo abaixo mostra como a adio ou
remoo de um dispositivo pode ser
manipulada
- Sample Code for WM_DEVICECHANGE
- Sample Borland C++ Builder Program
usb_gui_test.zip
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 126
Exercise 4 - Demonstration
WM_DEVICECHANGE
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 127
Modificaes no arquivo INF
- Sees modificveis no MCHPUSB.INF
- [DeviceList]
- %DESCRIPTION%=DriverInstall,
USB\VID_04D8&PID_000B, USB\VID_04D8&PID_000C
- [Strings]
ONEYSOFT="Walter Oney Software"
MFGNAME="Microchip Technology, Inc."
INSTDISK="Microchip Technology, Inc. Installation
Disc"
DESCRIPTION="PIC18F4550 Family Device"
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 128
Summary
- Windows tem device drivers internos para a maioria dos
dispositivos USB
- Uma Classe Custom Device precisa ser fornecida com um
Vendor specific Device Driver
- O Arquivo MCHPUSB.SYS pode ser usado como Vendor specific
Device Driver e ele pode economizar tempo de
desenvolvimento
- Arquivos INF
- A API implementada na MPUSBAPI.DLL usada para interagir
com o MCHPUSB.SYS
- Aplicaes Windows poden ser desenvolvidas usando a
MPUSBAPI.DLL
- A MPUSBAPI.DLL simplifica suas atividades de
desenvolvimento
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 129
MPUSBAPI.DLL - Resumo da
API
No MPUSBWrite Isochronous - OUT
No MPUSBRead Isochronous - IN
Sim MPUSBWrite Bulk-OUT
Sim MPUSBRead Bulk - IN
Sim MPUSBWrite Interrupt - OUT
Sim MPUSBRead,
MPUSBReadInt
Interrupt-IN
Time-out
aplicvel?
Funes Tipo de
tranferncia
USB Mass Storage
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 131
Agenda
- A Classe Mass Storage
- Bulk-Only-Transport (BOT) Protocol
- Secure Digital (SD) Card
- T10 SCSI Commands (SPC-3, SBC-2)
- O Ambiente de Trabalho
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 132
Agenda
- A Classe Mass Storage
- Bulk-Only-Transport (BOT) Protocol
- Secure Digital (SD) Card
- T10 SCSI Commands (SPC-3, SBC-2)
- O Ambiente de Trabalho
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 133
A Classe Mass Storage
- Resumo do Mass Storage
- Blocos de comando
- Exemplo de cdigo do protocolo de
comunicao
- Exemplo de cdigo com a Classe Mass
Storage
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 134
Resumo da classe
Mass Storage
- MSD: Transferncia de Arquivos
- Bulk-Only Transport: Controle da
transferncia.
(Comando Dado Status)
- SCSI Command: Leitura ou escrita de
dados.
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 135
Resumo(Cont.)
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 136
Blocos de comando
- SCSI Primary Commands (SPC)
- SCSI Block Commands (SBC)
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 137
Cdigo Para o protocolo de
comunicao
- Interface Descriptor-bInterfaceProtocol
- "Este campo indica o tipo de transferncia utilizado por esta
interface de comunicao
- bInterface Protocol Command Block
00h CBI with interrupt
01h CBI without interrupt
50h USB MSC BOT
02h - 4Fh Reserved
51h - FFh Reserved
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 138
Subclass Code
- Interface Descriptor-bInterfaceSubClass
- "Este campo indica a interface padro para transporte de
dados utilizando a Classe Mass Storage
- Subclass Code Command Block
01h RBC
02h ATAPI, MMC-2
03h ATAPI-TAPE
04h UFI
05h SFF-8070i FDD
06h SCSI transparent command set
07h - FFh Reserve for future use
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 139
Cdigo de Exemplo:
Device Descriptor
- /* Device Descriptor */
- rom USB_DEV_DSC device_dsc=
- {
- sizeof(USB_DEV_DSC), // Tamanho do Descriptor em
Bytes
- DSC_DEV, // Tipo do descriptor(Device)
- 0x0200, // Numero da Espec. USB em
BCD
- 0x00, // Class Code
- 0x00, // Subclass code
- 0x00, // Protocol code
- EP0_BUFF_SIZE, // Tamanho maximo para
EP0,verificar usbcfg.h
- 0x04D8, // Vendor ID
- 0x0009, // Product ID: mass storage
device demo
- 0x0001, // verso do Produto
- 0x01, // Manufacturer string index
- 0x02, // Product string index
- 0x00, // Device serial number string index
- 0x01 // Number of possible configurations
- };
Device
Descriptor
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 140
Cdigo de Exemplo:
Configuration 1 Descriptor
- /* Configuration 1 Descriptor */
- CFG01={
- /* Configuration Descriptor */
- sizeof(USB_CFG_DSC), // Tamanho do
descriptor
- DSC_CFG, // Tipo do
descriptor(Config.)
- sizeof(cfg01), // Numero total de
dados para este desc.
- 1, // Numero de
Interfaces
- _DEFAULT|_SELF, // Atributos, see
usbdefs_std_dsc.h
- 50, // Potencia total de
consumo (2X mA)
Device
Descriptor
{ Configuration 1
Descriptor
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 141
Cdigo de Exemplo :
Interface Descriptor
- /* Interface Descriptor */
- sizeof(USB_INTF_DSC), // Tamanho
deste Descriptor.
- DSC_INTF, // Tipo de
descriptor(Interface)
- 0, // numero da
Interface
- 2, // Numero de
end points
- MSD_INTF, // Class
code
- MSD_INTF_SUBCLASS, // Subclass
code
- MSD_PROTOCOL, //
Protocol code
- 0, // Indexador para a
string de Intf.
Device
Descriptor
{ Configuration 1
Descriptor
Interface
Descriptor
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 142
Cdigo de Exemplo :
Endpoint Descriptor
- /* Endpoint Descriptor */
-
sizeof(USB_EP_DSC),DSC_EP
,_EP01_IN,_BULK,MSD_IN_E
P_SIZE,0x00,
-
sizeof(USB_EP_DSC),DSC_EP
,_EP01_OUT,_BULK,MSD_OU
T_EP_SIZE,0x00
- };
Device
Descriptor
{ Configuration 1
Descriptor
Interface
Descriptor
Endpoint Descriptor }
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 143
Cdigo de Exemplo:
String Descriptors
- rom struct{byte bLength;byte bDscType;word
string[1];}sd000={ sizeof(sd000),DSC_STR,0x0409};
- rom struct{byte bLength;byte bDscType;word
string[25];}sd001={ sizeof(sd001),DSC_STR,
- 'M','i','c','r','o','c','h','i','p',' ', 'T','e','c','h','n','o','l','o','g','y','
','I','n','c','.'};
- rom struct{byte bLength;byte bDscType;word
string[28];}sd002={ sizeof(sd002),DSC_STR,
- 'M','i','c','r','o','c','h','i','p',' ','M','a','s','s','
','S','t','o','r','a','g','e',' ','D','r','i','v','e'};
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 144
Agenda
- A Classe Mass Storage
- Bulk-Only-Transport (BOT) Protocol
- Secure Digital (SD) Card
- T10 SCSI Commands (SPC-3, SBC-2)
- O Ambiente de Trabalho
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 145
Protocolo Bulk Only
Transport(BOT)
- Resumo Importante
- Caractersticas Funcionais
- Protocolo de Comando,dado e status
- Transferncia Host-device
- Fluxograma para o Protocolo BOT
- Cdigo de Exemplo
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 146
Protocolo Bulk Only
Transport(BOT)
- Resumo Importante
- Caractersticas Funcionais
- Protocolo de Comando,dado e status
- Transferncia Host-device
- Fluxograma para o Protocolo BOT
- Cdigo de Exemplo
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 147
Resumo Importante
- BOT Significa Transferncia do Tipo Bulk
- Comando,dado e status so transportados
via End Points do Tipo Bulk(no podendo
ser Control ou Interrupt)
- Esta classe,no precisa de nenhum
Endpoint do tipo Interrupt
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 148
Resumo Importante(Cont.)
- Command Block Wrapper (CBW)
Este pacote contem o bloco de comando e
informaes associadas.
- Command Status Wrapper (CSW)
Este pacote contem o Status do comando
passado pelo o Pacote CBW.
- Data-In: Indica uma transferncia de dados do
device para o Host
- Data-Out: Indica uma transferncia de dados do
Host Para o device
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 149
Protocolo Bulk Only
Transport(BOT)
- Resumo Importante
- Caractersticas Funcionais
- Protocolo de Comando,dado e status
- Transferncia Host-device
- Fluxograma Para o Protocolo BOT
- Cdigo de Exemplo
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 150
Caractersticas Funcionais
(Class-specific request)
- Para a Inicializao do Disposito
Mass Storage necessrio que o Host
envie um pacote ao device,conforme
abaixo :
None 0000h Interface 0000h FFh 21h
Data wLength wIndex wValue bRequest bmRequestType
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 151
Caractersticas Funcionais
(Class-specific request)
- Get Max LUN:
- O device retorna o Numero de
unidades de disco Validas
1byte 0001h Interface 0000h FEh A1h
Data wLength wIndex wValue bRequest bmRequestType
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 152
Caractersticas Funcionais
(Class-specific request)
-Get Max Lun:
- O device pode conter at 16
Unidades de disco Lgicas, LUN0-
LUN15(Fh)
- O Host utiliza o campo bCBWLUN
Para identificao da Unidade
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 153
Cdigo de exemplo
Class Specific Request
void USBCheckMSDRequest(void)
{
switch(SetupPkt.bRequest)
{
case MSD_RESET:
ctrl_trf_session_owner = MUID_MSD;
mDisableEP1to15(); // See usbdrv.h
if (UEP1bits.EPSTALL==1) {
UEP1bits.EPSTALL = 0;
MSDInitEP();
}
UIRbits.STALLIF = 0;
break;
case GET_MAX_LUN:
ctrl_trf_session_owner = MUID_MSD;
CtrlTrfData._byte[0] = MAX_LUN;
wCount.word = 1;
pSrc.bRam = (unsigned char*)&CtrlTrfData;
usb_stat.ctrl_trf_mem = _RAM;
break;
} //end switch(SetupPkt.bRequest)
}
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 154
Protocolo Bulk Only
Transport(BOT)
- Resumo Importante
- Caractersticas Funcionais
- Protocolo de Comando,dado e status
- Transferncia Host-device
- Fluxograma para o Protocolo BOT
- Cdigo de Exemplo
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 155
Protocolo de Comando,dado e
status
Pronto
Transporte de comando
(CBW)
Transporte de Status
(CSW)
Dado para
o Device
Dado Para
O Host
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 156
Protocolo de Comando,dado e status
Command Block Wrapper (CBW)
dCBWSignature
dCBWTag
dCBWDataTransferLength
bmCBWFlags
bCBWLUN
bCBWCBLength
CBWCB
Dir.
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 157
Protocolo de Comando,dado e
status
- O Pacote CBW contem o bloco de comandos
necessrios para a operao,o Host envia ao
device este pacote atravs do endpoint de
Sada do Tipo Bulk; o Tamanho do pacote
CBW de exatamente 31 Bytes
- O Device indica sucesso,gerando uma
condio de ACK na linha USB
- Caso o Pacote CBW no seja Valido,o device
gera uma condio de Stall na Linha USB.
- Se o Host detectar uma condio de Stall na Linha
USB,o mesmo responde com um Reset do device.
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 158
Protocolo de Comando,Dado e
status
- O host transfere o numero exato de bytes
conforme especificado pelo o campo
dCBWDataTransferLength e tambm pelo o
bit de direo ( )
- O report aps qualquer transferncia dos
dados melhora a integridade dos dados
- O device pode parar a qualquer momento o
comando,gerando uma condio de Stall
Dir. Dir.
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 159
Protocolo de Comando,Dado e Status
Command Status Wrapper (CSW)
bCSWSignature
dCSWTag
dCSWDataResidue
bCSWStatus
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 160
Command-Data- Protocol
- Bulk-In endpoint Pacote pequeno com
exatamente 13 bytes
- Status da Execuo do Comando passado
pelo o CBW
- dCSWDataResidue
Status
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 161
Protocolo Bulk Only
Transport(BOT)
- Resumo Importante
- Caractersticas Funcionais
- Protocolo de Comando,dado e status
- Transferncia Host-device
- Fluxograma para o Protocolo BOT
- Cdigo de Exemplo
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 162
Transferncia Host-device
- CBW Vlido e Significativo
- dCBWTag
- CSW Vlido e Significativo
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 163
Cdigo de exemplo - CBW Valido
byte IsValidCBW()
{
if ((gblCBWLength!=MSD_CBW_SIZE) ||
(gblCBW.dCBWSignature!=0x43425355))
return FALSE;
else return TRUE;
}
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 164
Cdigo de exemplo
CBW Significativo
byte IsMeaningfulCBW()
{
/* 3msb bits of CBWCBLength are reserved and must be 0,
* 4msb bits of CBWLUN are reserved and must be 0
* valid CBWCBLength is between 1 and 16B
* In bCBWFlags only msb indicates data direction rest must be 0
*/
if ((gblCBW.bCBWLUN<=0x0f)&&
(gblCBW.bCBWCBLength<=0x10)&&
(gblCBW.bCBWCBLength>=0x01)&&
(gblCBW.bCBWFlags==0x00|
gblCBW.bCBWFlags==0x80)) return TRUE;
else return FALSE;
}
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 165
Protocolo Bulk Only
Transport(BOT)
- Resumo Importante
- Caractersticas Funcionais
- Protocolo de Comando,dado e status
- Transferncia Host-device
- Fluxograma para o Protocolo BOT
- Cdigo de Exemplo
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 166
Fluxograma para o Protocolo BOT
Comando
Cpia CBW para
gblCBW
CBW
Valido?
CBW
Significativo?
Prepara CSW
dCSWTag,
dCSWSignature
Dir. Bit=1?
Set MSD_State = MSD_DATA_IN
Decodifica e Processa
CBWCB
MSDCommandHandler()
USBBufferReady(MSD_BD_OUT)
USBDriverService()
Return
Set MSD_State
= MSD_DATA_OUT
A
A
No
No No
Sim
Sim Sim
Sim
No
A
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 167
Agenda
- A Classe Mass Storage
- Bulk-Only-Transport (BOT) Protocol
- Secure Digital (SD) Card
- T10 SCSI Commands (SPC-3, SBC-2)
- O Ambiente de Trabalho
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 168
Notice of SD Simplified Specification
- The following conditions apply to the release of the simplified specification
("Simplified Specification") by the SD Card Association and the SD Group.
The Simplified Specification is a subset of the complete SD Specification
which is owned by the SD Card Association and the SD Group. This
Simplified Specification is provided on a non-confidential basis subject to
the disclaimers below. Any implementation of the Simplified Specification
may require a license from the SD Card Association, SD Group, SD-3C LLC
or other third parties.
- Disclaimers:
The information contained in the Simplified Specification is presented only
as a standard specification for SD Cards and SD Host/Ancillary products
and is provided "AS-IS" without any representations or warranties of any
kind. No responsibility is assumed by the SD Group, SD-3C LLC or the SD
Card Association for any damages, any infringements of patents or other
right of the SD Group, SD-3C LLC, the SD Card Association or any third
parties, which may result from its use. No license is granted by
implication, estoppel or otherwise under any patent or other rights of the
SD Group, SD-3C LLC, the SD Card Association or any third party. Nothing
herein shall be construed as an obligation by the SD Group, the SD-3C LLC
or the SD Card Association to disclose or distribute any technical
information, know-how or other confidential information to any third
party.
- I Accept I Decline
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 169
Como a Memria SD Card Funciona?
- SD Card Protocol
- SD Card Commands
- SPI interface schematic
- SD Memory Card Initialization
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 170
SD Bus Protocol
- SD BUS :
-Comando (bit stream)
-Resposta
-DADO(bit stream)
CMD---- --------- ---
DAT------------------------------------
--------
Comnndo Comnndo Comnndo Comnndo Comnndo Comnndo Comnndo Comnndo !ososfn !ososfn !ososfn !ososfn
Do Device para o
Carto
Do carto para o
Host
Operao (No Response)
Operao(No Data)
Inicializado pelo start bit
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 171
SPI Bus Protocol
- Pinagem do SD Card
- CS: Chip Select
- CLK: clock
- DataIn: Entrada de dados
- DataOut: Sada de dados
DataOut
Clock
DataIn
Chip Select (Logic Low)
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 172
SPI Bus Protocol
- SPI Bus:
-Os blocos de Dados/Comandos so de 8
bits
-Comando-Resposta-Dado
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 173
SD Memory Card Commands
- SD Memory Card Commands
- - 0x00 0x50
Set Block Length
8CY,0XFE
- 0x00 0x58
Write Block
- 0xFE 0x00 0x51
Read Block
- - 0x00 0x41
Bring card out of
Idle State
- - 0x01 0x40
Initialize Card to
Idle State
Data Token
Txed.
Data Token
Recd.
Response Byte Byte Code Command
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 174
SPI Interface Schematic
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 175
Inicializando SD Card
- Colocar Chip Select em 0
- Enviar comando de Inicializao
- Aguardar pela a resposta
- Esperar o token de dados (Leitura) ou
Clock (Escrita)
- Transmite/recebe Bytes
- Recebe o CRC
- Colocar Chip Select em 1
- 8CY para a execuo final da tarefa
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 176
SD Card FAT
- MBR, FAT1, FAT2, Root Directory,
- rea de dados
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 177
Agenda
- A Classe Mass Storage
- Bulk-Only-Transport (BOT) Protocol
- Secure Digital (SD) Card
- T10 SCSI Commands (SPC-3, SBC-2)
- O Ambiente de Trabalho
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 178
SPC-3 and SBC-2 Commands
- Comandos SPC-3 e SBC-2
Read10
Write10
Read Capacity
Verify10
Test Unit Ready
Inquiry
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 179
SCSI Command Details
- Read10 Command: Requisita uma
leitura do bloco de dados
especificado.
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 180
Read10 Handler
void MSDCommandHandler(void)
{.
switch(gblCBW.CBWCB[0]) {
case READ_10:
MSDReadHandler();
break;
.} // end switch
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 181
MSDReadHandler()
void MSDReadHandler()
{
.
while (TransferLength._word > 0) {
TransferLength._word--; // we have read 1 LBA
status = SectorRead(LBA._dword, (byte*)&msd_buffer[0]);
LBA._dword++;
// read the next LBA
if (status==sdcValid) {
msd_csw.bCSWStatus=0x00; // success
msd_csw.dCSWDataResidue=BLOCKLEN_512;//in order to send the 512 bytes
of data read
ptrNextData=(byte *)&msd_buffer[0];
while (msd_csw.dCSWDataResidue>0)
MSDDataIn(); // send the data
msd_csw.dCSWDataResidue=0x0; // for next time
} else {
msd_csw.bCSWStatus=0x01; // Error 0x01 Refer page#18
// of BOT specifications
/* Don't read any more data*/
msd_csw.dCSWDataResidue=0x0;
break; // break the loop
.
}
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 182
SCSI Command Details
- Write10 Command: Envia um bloco
de dados a ser escrito.
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 183
Write10 Handler
void MSDCommandHandler(void)
{.
switch(gblCBW.CBWCB[0]) {
case WRITE_10:
MSDWriteHandler();
break;
. } // end switch
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 184
MSDWriteHandler()
void MSDWriteHandler()
{
..
while (TransferLength._word > 0) {
msd_csw.dCSWDataResidue=BLOCKLEN_512;
/* Read 512B into msd_buffer*/
while (msd_csw.dCSWDataResidue>0)
MSDDataOut();
if(IsWriteProtected()) {
gblSenseData.SenseKey=S_NOT_READY;
gblSenseData.ASC=ASC_WRITE_PROTECTED;
gblSenseData.ASCQ=ASCQ_WRITE_PROTECTED;
msd_csw.bCSWStatus=0x01;
} else {
status = SectorWrite((LBA._dword),
(byte*)&msd_buffer[0]);
}
.
}
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 185
Agenda
- A Classe Mass Storage
- Bulk-Only-Transport (BOT) Protocol
- Secure Digital (SD) Card
- T10 SCSI Commands (SPC-3, SBC-2)
- O Ambiente de Trabalho
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 186
O Ambiente de Trabalho
- MSD.C e SDCARD.C
- Organizao da Memria
- MSD Buffer
- MSD Framework
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 187
MSD.C
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 188
SDCARD.C
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 189
Organizao da Memria
ACCESSBANK NAME=accessram START=0x0 END=0x5F
DATABANK NAME=gpr0 START=0x60 END=0xFF
DATABANK NAME=gpr1 START=0x100 END=0x1FF
DATABANK NAME=gpr2 START=0x200 END=0x2FF
DATABANK NAME=gpr3 START=0x300 END=0x3FF
DATABANK NAME=usb4 START=0x400 END=0x4FF PROTECTED
DATABANK NAME=usb5 START=0x500 END=0x5FF PROTECTED
// Combine usb6 and usb7 banks to define a 512 byte msd bank ...............................
//DATABANK NAME=usb6 START=0x600 END=0x6FF PROTECTED
//DATABANK NAME=usb7 START=0x700 END=0x7FF PROTECTED
DATABANK NAME=msd START=0x600 END=0x7FF PROTECTED
- Modificando o Linker
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 190
MSD Buffer
#if defined(USB_USE_MSD)
volatile far USB_MSD_CBW msd_cbw;
volatile far USB_MSD_CSW msd_csw;
#pragma udata myMSD=0x600
volatile far char msd_buffer[512];
#endif
- ..\MSD\system\usb\usbmmap.c
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 191
Arvore de Arquivos USB
Initialize
System()
while(1)
{
}
main.c
USBDriverService()
usbdrv.c
USBCtrlEPService()
usbctrltrf.c
usbdsc.c
USBCheckStdRequest()
USBStdSetCfgHandler()
usb9.c
MSDInitEP()
USBCheckMSDRequest()
SDCardInit()
ProcessIO()
MSDCommandHandler()
MSDReadHandler()
MSDWriteHandler()
MSDReadCapacityHandler()
msd.c
SocketInitialize()
MediaInitialize()
SECTORread()
SECTORwrite()
CSDread()
sdcard.c
Famlia e Ferramentas
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 193
PIC18F4550 & PIC16C7X5 :
Resumo das caractersticas USB
Features 18F4550 16C7X5
On-chip USB XCVR & Voltage
Regulator
Yes Yes
USB Dual-Port RAM 1-Kbyte 64-byte
USB Speed Low & Full Low
On-chip Pull-up Resistors Yes No
External XCVR Interface Yes No
Streaming Parallel Port Yes No
System Clock Flexible Fixed
Endpoints 32 6
Flash Yes No
USB Transfer Types
Control,
Interrupt, Bulk,
Isochronous
Control,
Interrupt
Pins Compatible? Yes

2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 194
PIC16C765 PIC16C765
LS 1.1 LS 1.1
PICmicro

MCU USB Roadmap


PIC16C745 PIC16C745
LS 1.1 LS 1.1
28 28 40/44 40/44 64 64 80 80
PIC18F4550 PIC18F4550
FS 2.0 FS 2.0
PIC18F66J50 PIC18F66J50
FS 2.0 FS 2.0
PIC18F67J50 PIC18F67J50
FS 2.0 FS 2.0
32K 32K
16K 16K
128K 128K
In production In production
In development In development
PIC18F87J50 PIC18F87J50
FS 2.0 FS 2.0
64K 64K
24K 24K
PIC18F2550 PIC18F2550
FS 2.0 FS 2.0
PIC18F2455 PIC18F2455
FS 2.0 FS 2.0
PIC18F4455 PIC18F4455
FS 2.0 FS 2.0
PIC18F86J50 PIC18F86J50
FS 2.0 FS 2.0
pin pin
PIC18F2450 PIC18F2450
FS 2.0 FS 2.0
PIC18F4450 PIC18F4450
FS 2.0 FS 2.0
Concept Concept Concept Concept
Concept Concept
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 195
PICDEM
TM
Demo Board Full-
Speed USB
- PIC18F4550, 20 MHz F
osc
- USB Port
- Serial Port
- PICtail Daughter Board
Compatible
- PIC18F4550, 20 MHz F
osc
- USB Port
- Serial Port
- PICtail Daughter Board
Compatible
- Power LED Indicators
- Potentiometer
- Temperature Sensor
- Power LED Indicators
- Potentiometer
- Temperature Sensor
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 196
PICtail Daughter Board para SD e
MMC
Interface para carto Secure Digital - usa SPI
AC164122
AN1003: USB Mass Storage
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 197
Pacote de Software
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 198
Outros Recursos
- Developers Discussion Forum
- http://www.usb.org/phpbb/
- http://forum.microchip.com/tt.asp?forumid=102
- Various application notes from:
- www.microchip.com/usb ou
- Design Center > Connectivity > USB
- AN950 (power) AN956 (CDC) e AN1003 (MSD)
- USB Complete 3
rd
Edition
by Jan Axelson
- Sites:
- http://www.beyondlogic.org/usbnutshell/
- http://www.lvr.com/usbc.htm
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 199
Referncias
- Cdigo fonte da MPUSBAPI.DLL
- http://www.microsoft.com
- http://www.microchip.com
- http://forum.microchip.com
- http://www.lvr.com
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 200
Perguntas?
A equipe do Masters Brasil
agradece sua presena!
Apndice USB
Apndice USB
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 203
Codificao NRZI
Idle 0 1 1 0 1 0 1
NRZI
- "1" = No Change in level
- "0" = Change in level
- "1" = No Change in level
- "0" = Change in level
0 1 1 1 1 1 1 0
Bit Stuffing: Every six consecutive 1, a 0
is inserted - This ensure adequate signal
transitions
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 204
Limitao do tamanho do
Endpoint
- O tamanho do endpoint dependente do tipo
da transferncia e da velocidade (full ou low)
- Tamanho do endpoint = Tamanho Maximo do
pacote
Low Speed
Full Speed
Control 8
Interrupt <= 8
Control 8, 16, 32, 64
Interrupt <= 64
Bulk 8, 16, 32, 64
Isochronous <= 1023
Tipo de Transfer. Max tam. Bytes
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 205
Transferncia tipo Control
- Uma Transferncia tipo Control consiste de mltiplas
transaes USB. Um exemplo mostrado abaixo.
Transao USB
SETUP Token Packet Data Packet Handshake Packet
Transao USB
IN Token Packet Data Packet Handshake Packet
Transao USB
OUT Token Packet Handshake Packet
Zero Data Packet
Setup
Data
(Read)
Status
Etapas
Control Transfer
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 206
Control Transfer
SETUP Token Packet Data Packet Handshake Packet
IN Token Packet Data Packet Handshake Packet
OUT Token Packet Handshake Packet
O dado nesta etapa uma mensagem USB de formato
requisitando que o device faa uma certa tarefa USB
como Set Device Address, Get Descriptor, etc.
USB Transaction
USB Transaction
USB Transaction
Zero Data Packet
Setup
Data
(Read)
Status
Control Transfer
Stages
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 207
Control Transfer
SETUP Token Packet Data Packet Handshake Packet
IN Token Packet Data Packet Handshake Packet
OUT Token Packet Handshake Packet
Se for requisitado um Get Descriptor, os dados nesta
etapa devem ser o descriptors do device.
USB Transaction
USB Transaction
USB Transaction
Zero Data Packet
Setup
Data
(Read)
Status
Control Transfer
Stages
Apndice Device Drivers e DLLs
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 209
Device Driver Signing
- Confirms that Device Drivers work
properly with Windows
- Microsoft HCT
- Steps
- Obtain Signature Files
- Run HCT
- Submit Results
- Adding to Microsofts List of Supported
Drivers
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 210
Points to Note - Path
Path: The MPUSBAPI.DLL should be
placed in the system path or in the
current directory
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 211
Points to Note - MPUSBAPI.LIB
- The MPUSBAPI.LIB file can be used only
Borland C++
- To use with VC++ in static linking
- Create a DLL project for MPUSBAPI.DLL in
VC++
- Add the source files of MPUSBAPI.DLL to the
project
- Make sure structure alignment is set to Byte
- Build the project to obtain .LIB and .DLL
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 212
Ateno a estes Pontos -
MPUSBAPI.LIB
- MPUSBAPI.DLL criada com _cdecl
- Ela no pode ser usada pelo VB 6.0
porem pode com o VB.NET
- Par usar com o VB 6.0
- "Rebuilde a DLL com as chamadas na
conveno _stdcall
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 213
Classes de Dispositivos
- Uma Classe de dispositivos um grupo de
dispositivos ou interfaces com atributos, servios
ou comportamentos similares
- As Classes de Dispositivos so de dois tipos:
- Standard Device Classes
- Exemplos - HID, CDC, MSD etc..
- Custom Classes
- Microchip Generic USB Driver
- Drivers de Classe (Class Driver)- Um device
driver que pode manipular qualquer dispositivo
que pertena a uma classe particular de
dispositivos chamada de Class Driver
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 214
Windows Registry
- Device installers usam e armazenam as
informaes disponveis no arquivo INF no
Registro do Windows
- Informaes sobre a USB so armazenadas em
diferentes lugares
- Alguns caminhos do Registro para as
informaes USB
- HKEY_LOCAL_MACHINE\Enum\USB
- HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services
\Class
- Visualizao atravs do regedit.exe ou
regedt32.exe
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 215
Verses do OS
- Normalmente os fornecedores dos
OS fornecem os Class Drivers
juntamente com o OS
- Algumas vezes nem todos as Device
Classes so suportadas
- USB-IF fornece as especificaes
para as Device Classes
- H sempre a possibilidade de que o
Fornecedor do OS adicione novos Class
Drivers em seus service packs e novas
verses
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 216
Microchip General Purpose USB
Device Driver
- mchpusb.inf - Este arquivo contm as
informaes sobre o device driver
- mchpusb.sys - Este arquivo um binrio do
Microchip USB Device Driver
- Ioctls.h - Contm os cdigos IOCTL para serem
usados em conjunto com a API Win32
DeviceIOControl()
- Apos executar o MCHPFSUSB_Setup.EXE esses arquivos
podem ser encontrados no seguinte caminho:
- C:\MCHPFSUSB\Pc\MCHPUSB Driver\Release
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 217
MCHPUSB.INF
- MCHPUSB.INF
- Cada dispositivo USB conectado em um host
com Windows dever ter um arquivo INF
- O Device Manager usa o arquivo INF para
associar o driver ao dispositivo
- Usos do arquivo INF:
- Para especificar as informaes de identificao
do dispositivo
- Para especificar as localizaes das fontes e
destinos dos arquivos do dispositivo
- Arquivo INF de exemplo (MCHPUSB.INF)
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 218
Usando o BCB - Aplicao console
- Passos
- Abra o BCB (Menu iniciar-> Programas ->Borland C++
Builder -> C++ Builder 6)
- Tente File->New->Other
- Selecione o Console Wizard e Clique em Ok
- Selecione: Source type as C++ e Remova o Check mark
em Specify Project Source
- Clique em OK, um arquivo C++ criado
- Adicione printf("Hello World!) na funo main()
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 219
Usando o BCB - Aplicao Windows
- Passo
- Abra o BCB (Menu iniciar-> Programas ->Borland C++
Builder -> C++ Builder 6)
- Tente File->New
- Um form criado
- Adicione um boto ao form, e d um duplo clique no
boto
- Adicione MessageBox(0,Hello,0,0);
- Execute a aplicao
- Clique no boto e veja o que acontece
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 220
Usando o Borland C++ Builder
- Uma comparao com o VC++ e Visual
Basic
- BCB desenvolvido pela Borland
- VC++, Visual Basic so desenvolvidos pela
Microsoft
- Todos os 3 ambientes de desenvolvimento
podem acessar DLLs atravs da API Win32
- Visual Basic prov o a indicao DECLARE
para acessar funes em DLLs
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 221
Introduo s Dynamic Link
Libraries
- O qu uma Library (Bi?
- "Linkagem Esttica
- "Linkagem Dinmica
- "Linkagem Load-time
- "Linkagem Run-time
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 222
"Linkagem Esttica
- O que "Linkagem Esttica
- Como funciona?
- Libraries so "linkadas durante a compilao e
"linkagem dos programs
Linker Linker
Library Library
Library Library
Arquivos Arquivos
Objeto Objeto
Arquivo Arquivo
EXE EXE
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 223
"Linkagem Esttica
- Desvantagens
- O tamanho da aplicao fica maior
- Aplicaes requerem maiores recursos
- Duplicao dos recursos de dados
- Duplicao do cdigo na memria
- Quando executando mltiplas instncias
do mesmo aplicativo em um ambiente
multi-tarefas a duplicao muito mais
evidente
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 224
"Linkagem Dinmica
- Soluo para os problemas da
"linkagem esttica
- Libraries so "linkadas em tempo
de execuo
Linker Linker
(Copies only (Copies only
the reference the reference
information information
into the EXE) into the EXE)
EXE File EXE File
Library Library
Library Library
Object Object
Files Files
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 225
"Linkagem Dinmica
- Benefcios
- A aplicao apenas armazena referencias,
portanto elas tem seu tamanho reduzido
comparadas com a "linkagem esttica
- Apenas uma cpia dos dados e recursos
comuns so mantidos na memria
- Conduz para uma melhor utilizao da
memria disponvel
- Modularizao no nvel do OS
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 226
"Linkagem Dinmica & DLLs
- DLL- Libraries que so "linkadas a
uma aplicao no tempo de
execuo so chamadas de Dynamic
Link Libraries
- A extenso padro para as Dynamic
Link Libraries no Windows DLL
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 227
DLLs
- DLLs so desenvolvidas com
ferramentas de desenvolvimento
para Windows como BCB, VC++ etc..
- DLLMain() o ponto de inicio.
- Exportam smbolos atravs da library
- Um arquivo .DEF auxilia na
especifio dos smbolos exportados
- Quando projetos de DLLs so criados
com ferramentas como VC++, BCB os
arquivos .DEF so criados
implicitamente
2006 Microchip Masters Brasil 2006 USB Implementao de Hardware e Software 228
Trademarks
The Microchip name and logo, the Microchip logo, Accuron, dsPIC, KeeLoq, microID,
MPLAB, PIC, PICmicro, PICSTART, PRO MATE, PowerSmart, rfPIC and SmartShunt
are registered trademarks of Microchip Technology Incorporated in the U.S.A. and
other countries.
AmpLab, FilterLab, Migratable Memory, MXDEV, MXLAB, SEEVAL, SmartSensor and The
Embedded Control Solutions Company are registered trademarks of Microchip
Technology Incorporated in the U.S.A.
Analog-for-the-Digital Age, Application Maestro, dsPICDEM, dsPICDEM.net, dsPICworks,
ECAN, ECONOMONITOR, FanSense, FlexROM, fuzzyLAB, In-Circuit Serial
Programming, ICSP, ICEPIC, Linear Active Thermistor, Mindi, MiWi, MPASM, MPLIB,
MPLINK, MPSIM, PICkit, PICDEM, PICDEM.net, PICLAB, PICtail, PowerCal,
PowerInfo, PowerMate, PowerTool, REAL ICE, rfLAB, rfPICDEM, Select Mode, Smart
Serial, SmartTel, Total Endurance, UNI/O, WiperLock and ZENA are trademarks of
Microchip Technology Incorporated in the U.S.A. and other countries.
SQTP is a service mark of Microchip Technology Incorporated in the U.S.A.
All other trademarks mentioned herein are property of their respective companies.

Você também pode gostar