2016-12-26 1 views
0

Ich habe ein PCI-basiertes Gerät, genauer gesagt basierend auf tms320c6000 DSP, ich versuche zu kommunizieren (Lesen einiger Register) mit diesem Gerät über den Jungo WinDriver. Überraschenderweise funktioniert es manchmal und manchmal nicht, wenn es nicht System hängt und ich das System neu starten muss.nicht deterministisches Verhalten bei der Verwendung von jungo Treiber für die Kommunikation mit einem PCI-Gerät

Dies ist der Code, der zum Lesen von EMIF-Registern verwendet wurde.

WD_TRANSFER tt[9]; 
BZERO(tt); 
for (unsigned i = 0; i < 9; i++) { 
    tt[i].cmdTrans = RM_DWORD; 
    tt[i].dwPort = mmr + (i * 4); 
} 
WD_MultiTransfer(hDevice, &tt, 9); 

MMR kam aus WD_CardRegister Funktion, die Informationen über die PCI BARs gab und deren zugeordnete Adresse (MMR ist nicht prefechtable kartiert memory).

Ich wäre sehr dankbar, wenn mir jemand einen Hinweis geben könnte, was dieses Problem verursachen könnte.

Dank

Antwort

0

ich meine Frage, falls ich beantworten das Problem an jemand anderen passiert ist.

Es gibt eine Reihe von Aktionen, die vor der Verwendung dieses Geräts ausgeführt werden sollten.

  1. Warmer Reset durch HDCR-Register (gesetztes WARMRESET-Bit).
  2. dann sollten die EMIF-Register initialisiert werden, das sind die Werte, die ich verwendet habe.

    struct emif emif_val = { 
        0x00052078, //GBLCTL; 
        0x73a28e01, //CE1 Flash/FPGA; 
        0xffffffd3, //CE0 SDRAM; 
        0x00000000, //Reserved; 
        0x22a28a22, //CE2 Daughtercard 32-bit async 
        0x22a28a42, //CE3 Daughtercard 32-bit sync 
        0x63115000, //SDRAM contral, 4 banks 
        0x0000081b, //SDRAM timing 
        0x001faf4d //SDRAM extended control 
    }; 
    

    und dann können Sie problemlos auf den gesamten Adressraum des Geräts zugreifen.

und für weitere Informationen this Linux-Quellcode sehr hilfreich

sein könnte
Verwandte Themen