eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaprogramowanie i kasowanie dwu kostek flash na jednej magistrali › Re: programowanie i kasowanie dwu kostek flash na jednej magistrali
  • Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
    atman.pl!goblin2!goblin1!goblin.stu.neva.ru!newsfeed.neostrada.pl!unt-exc-01.ne
    ws.neostrada.pl!unt-spo-b-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for
    -mail
    From: "J.F." <j...@p...onet.pl>
    Newsgroups: pl.misc.elektronika
    References: <o7ddno$b28$1@dont-email.me> <o7f8jr$e99$1@dont-email.me>
    In-Reply-To: <o7f8jr$e99$1@dont-email.me>
    Subject: Re: programowanie i kasowanie dwu kostek flash na jednej magistrali
    Date: Fri, 10 Feb 2017 10:53:16 +0100
    MIME-Version: 1.0
    Content-Type: text/plain; format=flowed; charset="iso-8859-2"; reply-type=response
    Content-Transfer-Encoding: 8bit
    X-Priority: 3
    X-MSMail-Priority: Normal
    Importance: Normal
    X-Newsreader: Microsoft Windows Live Mail 16.4.3528.331
    X-MimeOLE: Produced By Microsoft MimeOLE V16.4.3528.331
    Lines: 99
    Message-ID: <589d8d8f$0$5141$65785112@news.neostrada.pl>
    Organization: Telekomunikacja Polska
    NNTP-Posting-Host: 83.26.179.58
    X-Trace: 1486720399 unt-rea-a-01.news.neostrada.pl 5141 83.26.179.58:52470
    X-Complaints-To: a...@n...neostrada.pl
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:712957
    [ ukryj nagłówki ]

    Użytkownik "Pszemol" napisał w wiadomości grup
    dyskusyjnych:o7f8jr$e99$...@d...me...
    //check toggle bit2 indicating erase operation pending
    while(Status1 = *pStatus, Status2 = *pStatus, (Status1 ^ Status2) &
    (1 <<
    2))

    Tez mi sie ten kod nie podoba, ale patrze, patrze ... i bledu nie
    widze :-)
    Program sprawdzony z 1 koscia ?
    Pierwsze co mi sie nie podoba ... czytam status1, pamiec konczy
    czysczenie, do status2 czytam juz dane.
    Ale nieszczescia nie bedzie ... jak bit niezgodny, to przeczytamy
    jeszcze raz, a ewentualny blad bierzemy z bitow status1.
    Jak zgodny, to jak rozumiem pamiec zakonczyla kasowanie poprawnie ?

    {
    if(Status1 & (1 << 5)) // check error bit on one chip
    {
    LEDFRed();
    return 0;

    A te bledy sie zgadzaja ? Co wtedy robisz ?
    Bo tu mi jedna mozliwosc sie rysuje - pierwsza kostka zglasza blad,
    robimy return ... a druga sie ciagle kasuje.
    Jesli teraz zacznies jakies resety robic, to kto wie, jak to sie dla
    drugiej skonczy.

    }
    }
    while(Status1 = *pStatus, Status2 = *pStatus, (Status1 ^ Status2) &
    (1 <<
    (16+2)))

    To mi sie nie podoba - bo najpierw sprawdzalismy pierwsza koste, a
    druga lezala odlogiem.
    Ale jesli w tym czasie druga sie skonczyla ... to program pojdzie
    dalej, jak nie skonczyla, to poczeka,
    jak zglasza blad ... dlugo to wachlowanie bitem wtedy trwa ? Czy nie
    ma sytuacji takiej, ze druga kosc ma blad, a Ty ciagle w pierwszej
    petli sprawdzasz pierwsza. Pierwsza sie skasuje, a drugiej juz sie
    znudzi wachlowanie..

    {
    if(Status1 & (1 << (16+5))) // check error bit on second chip
    {
    LEDFRed();
    return 0;
    }
    }


    No i ... przerwania wylaczyles ? Bo jesli jakis odczyt sie zapląta
    miedzy odczyt status1 i 2, to zakonczysz czekanie przed czasem

    // Check the erase
    if(*pSector != 0xffffffff)
    {
    LEDFRed();
    return 0;

    Moze sprawdzic caly blok, a nie tylko poczatek ?
    Predkosciowo pamiec wyrabia ? moze trzeba troche opoznien dodac ?

    }
    else
    return 1;
    }

    // returns 1 if success
    int STFlashWrite32(unsigned int Address, unsigned char *pSource,
    unsigned int Size)

    A problem jest w kasowaniu czy w zapisie ?

    {
    int Timeout;
    U32 Status1, Status2;
    volatile U32 *pDest = (volatile U32 *)Address;
    U32 *pData = (U32 *)pSource;

    // EMCSC bit in System Controls and Status register is cleared in
    Flash_Init().
    // It controls how addresses are output on the EMC address pins.
    // For 32 bit bus the address is shifted so A2 is on A0 pin.
    U32 *pA1 = (U32 *)(EXTERNAL_FLASH_LOCATION + (0x555 << 2)); //555
    16bit
    mode
    U32 *pA2 = (U32 *)(EXTERNAL_FLASH_LOCATION + (0x2AA << 2)); //2AA
    16bit
    mode

    moze jakis volatile by sie przydal - bo jak kompilator wykryje, ze
    stale pod jeden adres zapisuje to samo, to moze zoptymalizowac.

    Cache jakiegos ten procesor nie ma ? Te zapisy wychodza do pamieci ?

    J.

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: