logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Błąd programowania dsPIC30F4013 w MPLAB IDE v7.31 - ICD0161 i ICD0275

Prymulka 19 Mar 2006 18:56 1704 10
REKLAMA
  • #1 2433591
    Prymulka
    Poziom 18  
    Posty: 378
    Pomógł: 9
    Ocena: 8
    Witam
    Mam zainstalowany MPLAB IDE v7.31 i kompilator C30. Napisalem jakis prosty program w C pod dspic30f4013 i wyskakuje mi ciagle blad przy programowaniu:

    Connecting to MPLAB ICD 2
    ...Connected
    Setting Vdd source to target
    Target Device dsPIC30F4013 found, revision = mg1 a1
    ...Reading ICD Product ID
    Running ICD Self Test
    ... Failed Self Test. See ICD2 Settings (status tab) for details.
    MPLAB ICD 2 Ready
    Programming Target...
    ...Erasing Part
    ...Programming Programming Executive
    ...Verifying Programming Executive
    ICD0161: Verify failed (MemType = Test, Address = 0x800000, Expected Val = 0x40080, Val Read = 0xFFFFFF)
    ICD0275: Programming failed.
    MPLAB ICD 2 Ready

    Bład wystepuje w komórce 0x800000 czyli w "configuration memory space" a ten kawalek obszaru jest "reserved". Co może byc tego przyczyna? Moze mam zly plik linker script?
  • REKLAMA
  • #2 2433773
    McRancor
    VIP Zasłużony dla elektroda
    Posty: 5326
    Pomógł: 479
    Ocena: 124
    Running ICD Self Test
    ... Failed Self Test. See ICD2 Settings (status tab) for details.

    Tym bym się najpierw zmartwił, co ta za ICD2?
  • REKLAMA
  • #3 2433815
    Prymulka
    Poziom 18  
    Posty: 378
    Pomógł: 9
    Ocena: 8
    Programuję kampiciem, jest to klon ICD2 (a ten to chyba z microchipa jakis). Ten błąd wynika z tego że zasilam swoj uklad z napiecia z programatora, a nie z zewnetrznego. Ale to nie powinno w niczym przeszkadzac, bynajmniej tak mi sie wydaje.
  • #4 2434479
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 241
    Mnie ten adres też coś niepasuje, to może być jednak wina skryptu linkera.
  • #5 2434529
    Prymulka
    Poziom 18  
    Posty: 378
    Pomógł: 9
    Ocena: 8
    To jest zawartosc tego pliku

    SEARCH_DIR(..\..\..\..\lib)
    SEARCH_DIR(..\..\..\..\support\gld)
    INPUT(-ldsp)
    INPUT(-lpic30)
    INPUT(-lm)
    INPUT(-lc)
    INCLUDE p30f4013.gld

    praktycznie nie wiem o co w nim chodzi. Skopiowalem go z jakiegos projektu microchipa zeby odpalic kompilacje.
  • REKLAMA
  • #6 2434741
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 241
    Zobacz jeszcze ten plik .gld, do tego obejrzyj "deasembly listing" tam znajdziesz co za diabeł siedzi pod tym adresem.
  • REKLAMA
  • #7 2437551
    Prymulka
    Poziom 18  
    Posty: 378
    Pomógł: 9
    Ocena: 8
    Ciężko mi powiedzieć co siedzi pod tym adresem. Mozliwe ze oscylator

    /*
    ** Memory Regions
    */
    MEMORY
    {
    data (a!xr) : ORIGIN = 0x800, LENGTH = 2048
    program (xr) : ORIGIN = 0x100, LENGTH = ((16K * 2) - 0x100)
    reset : ORIGIN = 0, LENGTH = (4)
    ivt : ORIGIN = 0x04, LENGTH = (62 * 2)
    aivt : ORIGIN = 0x84, LENGTH = (62 * 2)
    __FOSC : ORIGIN = 0xF80000, LENGTH = (2)
    __FWDT : ORIGIN = 0xF80002, LENGTH = (2)
    __FBORPOR : ORIGIN = 0xF80004, LENGTH = (2)
    __CONFIG4 : ORIGIN = 0xF80006, LENGTH = (2)
    __CONFIG5 : ORIGIN = 0xF80008, LENGTH = (2)
    __FGS : ORIGIN = 0xF8000A, LENGTH = (2)
    eedata : ORIGIN = 0x7FFC00, LENGTH = (1024)
    }
    __NO_HANDLES = 1; /* Suppress handles on this device */


    /*
    ** Base Memory Addresses - Program Memory
    */
    __RESET_BASE = 0; /* Reset Instruction */
    __IVT_BASE = 0x04; /* Interrupt Vector Table */
    __AIVT_BASE = 0x84; /* Alternate Interrupt Vector Table */
    __CODE_BASE = 0x100; /* Handles, User Code, Library Code */


    /*
    ** Base Memory Addresses - Data Memory
    */
    __SFR_BASE = 0; /* Memory-mapped SFRs */
    __DATA_BASE = 0x800; /* X and General Purpose Data Memory */
    __YDATA_BASE = 0x0C00; /* Y Data Memory for DSP Instructions */

    Jak wejsc do deasembly listing?
  • #8 2438344
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 241
    Prymulka napisał:
    Jak wejsc do deasembly listing?
    Menu View -> Dissasembly listing (przynajmniej w MPLAB dla zwykłych PIC tak było).
  • #9 2441192
    Prymulka
    Poziom 18  
    Posty: 378
    Pomógł: 9
    Ocena: 8
    Juz nic z tego nie rozumie
    moze to jednak wina sprzetu?
    szkoda ze nie mam na podmianke
  • #10 2442291
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 241
    Prymulka napisał:
    Juz nic z tego nie rozumie moze to jednak wina sprzetu?
    szkoda ze nie mam na podmianke
    Jak na mój gust wina kompilatora, podrzuć jeszcze plik HEX na forum, do obejrzenia. Jak chcesz się bawić mam gdzieś sztuke dspic3013, moge Ci sprezentować.
  • #11 2456258
    Prymulka
    Poziom 18  
    Posty: 378
    Pomógł: 9
    Ocena: 8
    Okazało się że kupiłem wadliwy programator. Dwa elementy nie były dolutowane, ale teraz jest juz ok. Teamat zamykam.

Podsumowanie tematu

LABEL_AI_GENERATED
Podczas programowania mikrokontrolera dsPIC30F4013 za pomocą MPLAB IDE v7.31 i kompilatora C30 pojawił się błąd ICD0161 (Verify failed) oraz ICD0275 (Programming failed) związany z adresem 0x800000 w obszarze pamięci konfiguracyjnej, który jest zarezerwowany. Problem początkowo sugerował błędy w pliku linker script (.gld) lub nieprawidłowe zasilanie układu (zasilanie z programatora zamiast zewnętrznego źródła). Analiza pliku linker script i pamięci wskazywała na możliwe nieprawidłowe mapowanie pamięci konfiguracyjnej. Ostatecznie przyczyną błędu okazał się wadliwy programator ICD2-klon, w którym dwa elementy były niedolutowane. Po naprawie programatora problem zniknął i programowanie przebiegło pomyślnie.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA