- 
Data: 2017-02-08 15:07:37
 Temat: Re: programowanie i kasowanie dwu kostek flash na jednej magistrali
 Od: "Pszemol" <P...@P...com> szukaj wiadomości tego autora
 [ pokaż wszystkie nagłówki ]"Pszemol" <P...@P...com> wrote in message 
 news:o7ddno$b28$1@dont-email.me...
 > Czy mial ktos z Was do czynienia z konfiguarcją hardware polegającą na
 > 32-bitowym procku (Arm Cortex M4) obsługującym dwie zewnętrzne pamięci
 > flash 16-bitowe (ST:M29W640GL)?
 >
 > Wydawałoby się, że zadanie trywialne, a jednak kostki nie chcą
 > współpracować... :-)
 >
 > Obie kostki pamięci mają wspólne sygnały Cs, Oe, We i A0..Axx a magistrala
 > danych po połowie 0..15 i 16..31 przydzielona odpowiednio do 0..15 każdej
 > kostki.
 >
 > Procek ustawiony na 32bit i aby używał "address shift mode" (EMC Shift
 > Control bit w SCS registrze jest 0) więc "nie wie" ze sa dwi kostki w
 > żaden
 > inny sposob jak tylko to, że zamiast do kasowania sektora wysylac
 > 16-bitowo
 > 0x00AA i 0x0055 a potem 0x0080 wysylam 32-bitowo 0x00AA00AA, 0x00550055 i
 > 0x00800080.
 >
 > I do tego problem jest ze czasem to dziala a czasem nie dziala. Jak nie
 > dziala to albo przy zmieniajacym sie bicie 2 jest ustawiony bit 5 (error)
 > a
 > czasem juz na samym koncu przy sprawdzeniu odczytu skasowanej lokacji jest
 > jedna kostka skasowana a druga nieskasowana (na szynie jest np
 > 0xFFFF0000).
 >
 > Czy do takiej konfiguracji pamieci podchodzi sie jakos inaczej do
 > kasowania/programowania? Ktos sie podzieli doswiadczeniem?
 
 A może ktoś zechce popatrzeć na kod programu i znaleźć "słabe" jego strony?
 Zachęcam gorąco... :-)
 
 // returns 1 if success
 int STFlashEraseSector32(unsigned int SectorAddress)
 {
 U32 Status1, Status2;
 volatile U32 *pSector = (volatile U32 *)(SectorAddress - (SectorAddress %
 0x20000));
 volatile U32 *pStatus = pSector;
 
 // 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
 
 // Reset
 *pA1 = 0x00AA00AA;
 *pA2 = 0x00550055;
 *pSector = 0x00F000F0;
 //
 *pA1 = 0x00AA00AA;
 *pA2 = 0x00550055;
 *pA1 = 0x00800080; //erase
 *pA1 = 0x00AA00AA;
 *pA2 = 0x00550055;
 *pSector = 0x00300030; //erase sector
 
 //check toggle bit2 indicating erase operation pending
 while(Status1 = *pStatus, Status2 = *pStatus, (Status1 ^ Status2) & (1 <<
 2))
 {
 if(Status1 & (1 << 5)) // check error bit on one chip
 {
 LEDFRed();
 return 0;
 }
 }
 while(Status1 = *pStatus, Status2 = *pStatus, (Status1 ^ Status2) & (1 <<
 (16+2)))
 {
 if(Status1 & (1 << (16+5))) // check error bit on second chip
 {
 LEDFRed();
 return 0;
 }
 }
 
 // Reset
 // *pA1 = 0x00AA00AA;
 // *pA2 = 0x00550055;
 // *pSector = 0x00F000F0;
 // Check the erase
 if(*pSector != 0xffffffff)
 {
 LEDFRed();
 return 0;
 }
 else
 return 1;
 }
 
 // returns 1 if success
 int STFlashWrite32(unsigned int Address, unsigned char *pSource, unsigned
 int Size)
 {
 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
 
 if((Address & 0x01) != 0x00 || (Address & 0x02) != 0x00)
 return 0;
 if(((U32)pSource & 0x01) != 0x00 || ((U32)pSource & 0x02) != 0x00)
 return 0;
 
 for(unsigned int i = 0; i < Size/4; i++)
 {
 Timeout = 0;
 // Reset
 *pA1 = 0x00AA00AA;
 *pA2 = 0x00550055;
 *pDest = 0x00F000F0;
 //
 *pA1 = 0x00AA00AA;
 *pA2 = 0x00550055;
 *pA1 = 0x00A000A0; //program
 *pDest = *pData; //data word
 //check toggle bit for each chip separatelly
 while(Status1 = *pDest, Status2 = *pDest, (Status1 ^ Status2) & (1 <<
 6))
 {
 if(Status1 & (1 << 5)) // check error bit on one chip
 {
 LEDEYellow();
 return 0;
 }
 if(++Timeout > 10000)
 {
 LEDDGreen();
 return 0;
 }
 }
 while(Status1 = *pDest, Status2 = *pDest, (Status1 ^ Status2) & (1 <<
 (16+6)))
 {
 if(Status1 & (1 << (16+5))) // check error bit on second chip
 {
 LEDEYellow();
 return 0;
 }
 if(++Timeout > 10000)
 {
 LEDDGreen();
 return 0;
 }
 }
 // Reset
 // *pA1 = 0x00AA00AA;
 // *pA2 = 0x00550055;
 // *pDest = 0x00F000F0;
 // check write
 if(*pDest != *pData)
 {
 LEDDGreen();
 LEDEYellow();
 return 0;
 }
 ++pDest;
 ++pData;
 }
 
 
 
Następne wpisy z tego wątku
- 08.02.17 16:00 Adam Górski
- 08.02.17 16:33 Pszemol
- 08.02.17 16:38 Pszemol
- 08.02.17 17:03 Adam Górski
- 08.02.17 17:26 Pszemol
- 08.02.17 19:52 Janusz_k
- 08.02.17 20:31 Pszemol
- 08.02.17 21:33 Pszemol
- 09.02.17 12:13 Pszemol
- 09.02.17 12:58 Adam Górski
- 09.02.17 14:17 Piotrek
- 09.02.17 14:32 Adam Górski
- 09.02.17 14:56 Piotrek
- 09.02.17 17:03 Piotr Dmochowski
- 10.02.17 10:53 J.F.
Najnowsze wątki z tej grupy
- Zamek elektroniczny
- szablon do pasty DIY
- Głośnik potrzebny
- Silikonowy przewód ekranowany
- Wtyk bananowy ekranowany
- Co może być gorsze od pożaru elektryka?
- daltonizm
- Mały Linux
- Superkondensator. Czy to się uda?
- Stare filmy o technice
- Zasilanie własnych konstrukcji przez PoE
- Jak działa domofon?
- Co oni mierzą miernikiem
- 40 lat OrCAD-a
- Multimetr z bluetooth
Najnowsze wątki
- 2025-10-31 Warszawa => Starszy Konsultant SAP - obszar PP <=
- 2025-10-31 Zamek elektroniczny
- 2025-10-31 Warszawa => Sales Assistant <=
- 2025-10-31 Warszawa => Senior SAP Consultant - PP area <=
- 2025-10-31 Warszawa => Junior Rekruter <=
- 2025-10-31 Warszawa => Engineering Manager (doświadczenie w branży lotniczej lu
- 2025-10-30 Był neosędzia w składzie jest cofka w apelacji [dożywocie za potrójne zabójstwo]
- 2025-10-30 Warszawa => Lead SAP PP Consultant <=
- 2025-10-30 Poznań => Konsultant SAP HCM <=
- 2025-10-30 Warszawa => Junior Rekruter <=
- 2025-10-30 Warszawa => Senior SAP Consultant - PP area <=
- 2025-10-30 Zakrzewo => SAP HCM Consultant <=
- 2025-10-30 Gang przestępców napadających przestępców już rozbity! [CBŚP,media,prawny humor]
- 2025-10-30 Kraków => Koordynator Produkcji / Przedstawiciel ds. rozwoju produktu
- 2025-10-30 Kraków => Production Coordinator / Representant Product Dev <=




![Najtańsze pożyczki pozabankowe - ranking [© Daniel Krasoń - Fotolia.com] Najtańsze pożyczki pozabankowe - ranking](https://s3.egospodarka.pl/grafika2/pozyczki-pozabankowe/Najtansze-pozyczki-pozabankowe-ranking-212702-150x100crop.jpg) 
![Jak najkorzystniej wysyłać i odbierać przelewy walutowe w EURO [© Production Perig - Fotolia.com] Jak najkorzystniej wysyłać i odbierać przelewy walutowe w EURO](https://s3.egospodarka.pl/grafika2/przelewy-bankowe/Jak-najkorzystniej-wysylac-i-odbierac-przelewy-walutowe-w-EURO-205900-150x100crop.jpg) 
![Linki dofollow i nofollow - jakie są różnice i czy linki nofollow mają sens? [© amathieu - fotolia.com] Linki dofollow i nofollow - jakie są różnice i czy linki nofollow mają sens?](https://s3.egospodarka.pl/grafika2/linki-sponsorowane/Linki-dofollow-i-nofollow-jakie-sa-roznice-i-czy-linki-nofollow-maja-sens-227269-150x100crop.jpg) 
![Koniec rękojmi w sprzedaży konsumenckiej [© Africa Studio - Fotolia.com.jpg] Koniec rękojmi w sprzedaży konsumenckiej](https://s3.egospodarka.pl/grafika2/ustawa-o-prawach-konsumenta/Koniec-rekojmi-w-sprzedazy-konsumenckiej-250738-150x100crop.jpg) 
 Elektromobilność dojrzewa. Auta elektryczne kupujemy z rozsądku, nie dla idei
Elektromobilność dojrzewa. Auta elektryczne kupujemy z rozsądku, nie dla idei 
 
 
 
![Milion na koncie? Wystarczyło inwestować po około 2 tysiące miesięcznie [© wygenerowane przez AI] Milion na koncie? Wystarczyło inwestować po około 2 tysiące miesięcznie](https://s3.egospodarka.pl/grafika2/oszczedzanie-pieniedzy/Milion-na-koncie-Wystarczylo-inwestowac-po-okolo-2-tysiace-miesiecznie-269397-150x100crop.jpg) 
![Wynajem mieszkania w Warszawie pochłania 44% pensji. Zobacz, jak wypadamy na tle Europy [© pixabay] Wynajem mieszkania w Warszawie pochłania 44% pensji. Zobacz, jak wypadamy na tle Europy](https://s3.egospodarka.pl/grafika2/rynek-najmu/Wynajem-mieszkania-w-Warszawie-pochlania-44-pensji-Zobacz-jak-wypadamy-na-tle-Europy-269391-150x100crop.jpg) 
![Lot z niespodzianką - jak overbooking zmienia podróż i jakie prawa mają pasażerowie? [© wygenerowane przez AI] Lot z niespodzianką - jak overbooking zmienia podróż i jakie prawa mają pasażerowie?](https://s3.egospodarka.pl/grafika2/prawa-pasazera/Lot-z-niespodzianka-jak-overbooking-zmienia-podroz-i-jakie-prawa-maja-pasazerowie-269384-150x100crop.jpg) 
![Lider z sercem: empatia i zaufanie jako klucz do sukcesu zespołu [© wygenerowane przez AI] Lider z sercem: empatia i zaufanie jako klucz do sukcesu zespołu](https://s3.egospodarka.pl/grafika2/lider/Lider-z-sercem-empatia-i-zaufanie-jako-klucz-do-sukcesu-zespolu-269133-150x100crop.png) 
![Bańka AI za 5 bilionów dolarów: Kiedy inwestorzy powiedzą: sprawdzam? [© wygenerowane przez AI] Bańka AI za 5 bilionów dolarów: Kiedy inwestorzy powiedzą: sprawdzam?](https://s3.egospodarka.pl/grafika2/AI/Banka-AI-za-5-bilionow-dolarow-Kiedy-inwestorzy-powiedza-sprawdzam-269382-150x100crop.png) 
 


