BUG PIC18F2550

OP #525850
Lesenswert?

Hi Kloberscht,

daspdf hat den Namen 39632D. Google mal, erster Eintrag. Ja und das 
Kapitel 17.5.1.1 steht aus Seite 179. Das Kapitel heißt: Bus Activity 
Detect Interrupt Bit(ACTVIF). Von anderen Quellen habe ich das hier:


You should first understand why you have been suspended, and what your 
duties as a device are in this state.
You will always be suspended 3ms after plugging in the device because 
the host won't send SOFs before it has reset the device, so there is no 
activity on the bus, so you must go into suspend mode until the resume 
signal is received.
In the suspend state you must ensure that you do not draw more than the 
permitted suspend current, which probably means that you must go into 
'sleep' mode on the PIC.
The code as originally written by Microchip tended to work correctly 
except that it was left up to the coder/designer to ensure that the 
current drawn was in specification for the suspend state (by entering 
sleep mode).
Unfortunately the PIC18F2550 has a bug in the suspend/resume logic, 
which was not known to Microchip at the time that they wrote the 
framework code. This resulted in a failure to resume correctly if the 
timing was slightly changed in the code. This bug they have chosen to 
document in later versions of the data sheet as normal operation, so see 
17.5.1.1 Bus Activity Detect Interrupt Bit (ACTVIF) in the 'c release of 
the data sheet. I solved this bug by a different procedure myself, but I 
am informed that the Microchip workaround is also effective.

Das workaround sieht so aus(aus dem Datenblatt):
1
UCONbits.SUSPND = 0;
2
while (UIRbits.ACTVIF) { UIRbits.ACTVIF = 0; }

Doch wo füge ich das in der firmware genau ein?

Dachte hier:
1
void USBWakeFromSuspend(void)
2
{
3
    /* 
4
     * If using clock switching, this is the place to restore the
5
     * original clock frequency.
6
     */
7
    UCONbits.SUSPND = 0;
8
    UIEbits.ACTVIE = 0;
9
    UIRbits.ACTVIF = 0;
10
}//end USBWakeFromSuspend

Doch ohne Erfolg! Mir gehen echt bald die Ideen aus, wie ich diesen 
Fehler beheben könnte. Was mich nur wundert ist das es bei 
sprut(http://www.sprut.de/electronic/pic/8bit/18f/programm/usb2550/usb2550.htm) 
alles so einwandfrei funzt.

Wer kann mir da weiterhelfen?

lg,
blitzgeist

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren