Escolar Documentos
Profissional Documentos
Cultura Documentos
Micro Ship Usb
Micro Ship Usb
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
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