Stap 6: Inzicht in de broncode van de firmware
In het zip-bestand van 'PIC18F generieke verborg Device', opgenomen in dit artikel vindt u een volledige kant-en-klare-firmware voor de PIC18F4550.Simpelweg unzip het bestand in uw favoriete MPLAB project directory en vervolgens gebruiken van MPLAB om het project te openen.
Ik heb zowel de bronbestanden als de headerbestanden onderverdeeld in code die je moet kijken en dan de meer algemene delen van de stack van de Microchip (opgeslagen onder 'USB stack' sub-mappen in de project-navigator).
De bestanden in de mappen 'USB stack' zijn interessant, maar om te snel te gaan je moet niet zorgen te maken over de aspecten van de bijzonderheid van de code totdat u meer vertrouwd met de hogere niveaus bent.
Aangezien de VID/PID en de rest van de informatie van de opsomming is al voorbereid moet u starten door het uitvoeren van een build-alles over het project en vervolgens de resulterende firmware te downloaden naar uw PIC18F. Natuurlijk, je moet een sane build-omgeving voor dit te laten werken, maar er zijn tal van middelen via Google als u problemen met uw omgeving ondervindt.
Probeer enkele eenvoudige voorbeelden om ervoor te zorgen dat alles ok is voor dit project herladen en opnieuw proberen.
De firmware biedt 3 commando's:
- 0x80 - / uitschakelen van de LED
- 0x81 - Lees de status van de push-schakelaar
- 0x82 - Lees de status LED
De code die deze opdrachten vervult is gelegen in het bronbestand main.c in de ProcessIO() functie. Deze functie is verantwoordelijk voor het bepalen van de gewenste opdracht en vervolgens verzenden en ontvangen van gegevens zo nodig. Dit is vrij eenvoudig aangezien de USB stack zorgt ervoor dat alle de onderliggende complexiteit; Neem een snelle blik op de broncode en u zult zien hoe eenvoudig dit echt. De enige extra controle uitgevoerd door de functie is om te zien of het apparaat in een 'geconfigureerde staat'; Dit betekent dat het apparaat is aangesloten op een host, en opsomming succesvol is geweest. De belangrijkste functie roept gewoon de USB-stack voor het uitvoeren van alle low-level Apparaattaken, waarna de ProcessIO functie over en weer. Het is mogelijk om dit te doen met behulp van interrupts in plaats van een lus, maar bij deze firmware heb hield ik het zo eenvoudig mogelijk. Om te begrijpen een beetje Neem meer over het inventariseren een kijkje op usb_descriptors.c waarin de informatie die wordt doorgegeven aan de host wanneer het apparaat voor het eerst is aangesloten. In de bron vindt u de VID en PID-informatie voor het apparaat, alsmede een aantal configuratie-descriptoren die naar de host, verklaren wat voor soort interfaces is met dit apparaat en de mogelijkheden van de interfaces. De 'endpoints' zijn de connectors voor de 'buizen' eerder beschreven. Er zijn ook sommige snaren die de fabrikant en het product tekstueel beschrijven. Windows maakt meestal gebruik van deze tekenreeksen bij het benoemen van USB-apparaten. Inzicht in het inventariseren en de descriptor-formaten is vrij complex en wordt gedekt door de verschillende USB-specificaties, alsmede een groot boek door Jan Axelson genaamd 'USB-Complete - Everything you need to ontwikkelen aangepaste USB-randapparaten' (ISBN 978-1931448086). Als u genieten van dit artikel en wil graag meer ernstige over USB ik zou sterk aanraden om een exemplaar van het boek, hielp het zeker me wanneer ik aan het leren was. De firmware is over het algemeen vrij simpel, alles wat je moet opstaan en uitvoeren van de communicatie van en naar de host is opgenomen. Uiteraard kun je dit zo complex als je wilt, maar voor de toepassing van dit artikel (krijgt u gaan met USB) er is genoeg om te experimenteren met.