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