Forum: Mikrocontroller und Digitale Elektronik Fehler bei Benutzung von USB Massenspeicher mit PIC32 StarterKit


von Thomas M. (thomas_m56)


Lesenswert?

Servus,

ich programmiere gerade einen PIC32MX795F512L auf einem Ethernet 
StarterKit und auf einem selbst entwickelten Board. Für mein Projekt 
möchte ich verschiedene Daten auf einem USB-Massenspeicher loggen. Ich 
begann die Programmierung mithilfe des "USB Host - Simple Thumb Drive" 
Demo von Microchip: 
http://ww1.microchip.com/downloads/en/DeviceDoc/MCHP_App_Lib_v2010_10_19_Installer.zip

Das Demo funktioniert wunderbar. Wenn ich nun aber das DEMO mit meinem 
Projekt verbinde habe ich das Problem, dass der USB Stick nach ein paar 
Sekunden (manchmal auch länger (ein paar Minuten), in letzter Zeit aber 
immer nach ca. 10 Sekunden) nicht weiter beschrieben wird oder sich 
sogar das ganze Board aufhängt.

Hier meine Einstellungen:
1
#pragma config UPLLEN   = ON            // USB PLL Enabled 
2
#pragma config FPLLMUL  = MUL_20        // PLL Multiplier 
3
#pragma config UPLLIDIV = DIV_2         // USB PLL Input Divider 
4
#pragma config FPLLIDIV = DIV_2         // PLL Input Divider 
5
#pragma config FPLLODIV = DIV_1         // PLL Output Divider 
6
#pragma config FPBDIV   = DIV_1         // Peripheral Clock divisor 
7
#pragma config FWDTEN   = OFF           // Watchdog Timer  
8
#pragma config WDTPS    = PS1           // Watchdog Timer Postscale 
9
#pragma config FCKSM    = CSDCMD        // Clock Switching & Fail Safe Clock Monitor 
10
#pragma config OSCIOFNC = OFF           // CLKO Enable 
11
#pragma config POSCMOD  = XT            // Primary Oscillator 
12
#pragma config IESO     = OFF           // Internal/External Switch-over #pragma config FSOSCEN  = OFF           // Secondary Oscillator Enable #pragma config FNOSC    = PRIPLL        // Oscillator Selection 
13
#pragma config CP       = OFF           // Code Protect 
14
#pragma config BWP      = OFF           // Boot Flash Write Protect 
15
#pragma config PWP      = OFF           // Program Flash Write Protect 
16
#pragma config ICESEL   = ICS_PGx2      // ICE/ICD Comm Channel Select #pragma config DEBUG    = OFF           // Debugger Disabled for Starter Kit

Ansonsten habe ich ein T1 Interrupt alle 20ms mit Priorität 2 (Messungen 
werden durchgeführt), alle 50 ms wird ein T2 Interrupt ausgelöst mit 
Priorität 2 (Abfrage aller Eingänge) und über T3 wird jede ms ein Zähler 
erhöht. Die heap size habe ich auf 8192 Bytes eingestellt, das Feld mit 
der minimale stack size habe ich freigellassen. Beides habe ich aber 
auch schon ohne Erfolg variiert. Als USB Stick verwende ich einen ganz 
normalen Werbestick.

Hatt jemand eine Idee wo das Problem liegen könnte? 
(Oszillatoreinstellung,
Speicherreservierung, Interrupt Priorität (habe ich auch schon variiert, 
dabei ist mir aufgefallen dass ab einer Priorät von 4 der USB Stick gar 
nicht mehr initialisiert werden kann und das Programm hängen 
bleibt),...)

Danke für die Hilfe,
Thomas

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.