Oczywiście, że można to zrobić bez użycia HAL, czy SPL. Kod, który tu przedstawiłeś wymaga bardzo wielu poprawek. Nie uważasz, że funkcja zapisu do pamięci jest zbyt skomplikowana? Długa na 88 linii, zawiera dziwne stałe typu: 1 << 14, 0xF3. Np co robi ta instrukcja: [syntax=c]FLASH->CR &= 0x1FFE;[/syntax], albo taka: [syntax=c]while(FLASH->SR...
Czy tak trudno odpowiedzieć na pytanie? Sam się czasami dziwie, że to taki trudne. Nie specjalizuje się w angielskim, a trudno przetłumaczyć/znaleźć zagadnienie w pdfie. Wszystko wynika ze specyfiki takiej pamięci. Pomijając aspekty fizyczne, czysta komórka pamięci flash odpowiada stanowi "1". Podczas zapisu do pojedynczej komórki można tylko i wyłącznie...
Odpowiedź na Twoje pytanie jest dosyć prosta - protokół SWD nie ma rozkazu zapisu do flash i tego się po prostu nie da tak zrobić jak zapisu do RAM. Oprogramowanie na PC, które się komunikuje przez SWD z układem (np. program do ST-Linka, OpenOCD) wgrywa do RAMu specjalną procedurę, która fizycznie realizuje zapis (poprzez odpowiednią sekwencje zapisów...
C-SKY Flash Programmer jest oprogramowaniem dostarczanym do pobrania przez XuanTie na stronie https://www.xrvm.cn/community/download?i... https://obrazki.elektroda.pl/1504579400_... Narzędzie to współpracuje z programatorami CK-Link do odczytu i zapisu w pamięci flash procesorów C-Sky z rdzeniem RISC. Procesory...
Pomijając sensowność używania sprintf do SKOPIOWANIA stringa do jakiejś zmiennej, to błędów jest bardzo dużo. 1. Skasowałeś stronę którą chcesz zapisywać? 2. Odblokowałeś zapis do flasha? 3. Twój zapis jest dziurawy, bo jak zero będzie na nieparzystej pozycji, to pętla nie zakończy się wtedy kiedy będziesz chciał 4. Odczytujesz FlashStatus, to sprawdź...
Być może da się pokombinować z wyzwalaniem transferu timerem. Z drugiej strony nie bardzo rozumiem, jaki miałby być z tego pożytek - przesadzenia całego oprogramowania do RAM łatwe nie jest, a na czas zapisu procesor zatrzyma się przy dostępie do Flash, chyba że to model z dwoma bankami.
Witam Czy obsługa przerwań STM32F1 od UARTa nie koliduje z jednoczesnym zapisem do pamięci flash mikrokontrolera (czy podczas zapisu do pamięci flash nie są blokowane przerwania) ?
Mieszasz ze sobą dwie zupełnie oddzielne kwestie. Adresy w pamięci dotyczą komórek jednobajtowych, bo niby jak inaczej miałoby to być? Niemniej jednak fizyczny zapis dokonywany jest po 4 bajty na raz jeśli ustawiłeś zapis 32-bitowy.
Witam. Zaopatrzyłem się niedawno w aplikację zwaną Flash loader demonstrator. Umożliwia ona m.in. zapis i odczyt pamięci programu mikrokontrolera STM32 przez bootloader poprzez RS232. Gdy chciałem odczytać pamięć flash i zapisać obraz pamięci w pliku hex mocno się zdziwiłem, gdyż plik miał rozmiar 319744 bajtów, a flash mojego STM32F103RB ma "tylko"...
Flash procesorów STM32 ma wytrzymałość 1000 cykli zapisów. Korzystasz z kilku bajtów a zapisujesz całe 4096. W dodatku nie wiem po co wyrównujesz do 256 te bufory, przecież one są w RAM.
Jestem nowy w STM32. Podłączyłem flash w25q128jv poprzez QSPI z poradnika https://controllerstech.com/w25q-flash-s... działa, ale podczas próby odczytu pamięci zwraca mi zawsze 0x88, lecz gdy odłączę GND do pamięci odczyt działa z artefaktami.
Witam! Chcę wgrać parę danych do pamięci mikrokontrolera STM32F107 (ustawienia domyślne). Nie wiem za bardzo jak powinien wyglądać kod linkera do takiego zapisu? Korzystam z CodeSourcery ze strony Freddiego. Nie posiadam debuggera, więc kod mogę wgrywać tylko poprzez bootloader na USART. Pamięć chciałbym zapisać paroma danymi 32bit, a następnie mieć...
Jeszcze jedno pytanie mam tak w sumie. Komentarze, które tam dodałem w kodzie mają sens? Wzorowałem się na jednym pdf, który jest dostępny na forum, lecz próbowałem to zrozumieć a nie jedynie "przeklepać na głupiego".
Witajcie, siedzę i szukam błędu w bibliotekach do obsługi NRF24L01. Skopiowałem je z biblioteki, którą wykorzystuje w ATmega8. Działa nawet dobrze tam, niestety na STM32F0DISCOVERY już nie chce. Będę bardzo wdzięczny za pomoc. To najpierw kody, które wyrażają więcej niż tysiąc słów ;) : main.c http://obrazki.elektroda.pl/4732813300_1...
W wyszukiwarce wpisz "stm32 eeprom emulation".
Hmm... Przez "niektóre komórki" rozumiesz tak totalnie jakieś arbitralne adresy, czy całe strony? Dziwne trochę, bo przecież flash da się kasować tylko stronami... Masz w swoim programie funkcje zapisu do flash'a? 4\/3!!
Aktualizacja z września 2025: zobacz tutaj, aby uzyskać szczegółowe informacje na temat konwersji STM32 przez UART zamiast J-Link (tj. J-Link nie jest wymagany) https://www.elektroda.com/rtvforum/viewt... (dzięki (at)max4elektroda!) zobacz tutaj, aby uzyskać wyższą wersję przekonwertowanego oprogramowania CK-Link Lite dla STM32...
W sumie racja, bo wygenerowac sobie wartości potrafie tylko nie wiem właśnie jak ugryźć zapis do pamięci FLASH.
Usiłuję skorzystać z tej funkcji żeby zapisywać sobie wartość pewnej zmiennej do pamięci flash. Problem polega na tym, że za cholerę nie mogę zmusić bibliotekę do pracy. Dołączam sobie do projektu plik stm32f10x_flash.c i przy próbie kompilacji dostaję długi ciąg błędów sprowadzających się do tego, że kompilator nie rozumie typu uint32_t. Gdy dołączę...
Nie, pamięci nie rezerwowałem, nie wyłączałem bo ... nie umiem. Będę pilnie czytał Elektrodę, może się naumię. Ale program zajmuje 186Kb - to taka paga na górze się zostanie wolna. Środowisko CoCox . Z ukłonami Andrzej Korycki
Na przykład Cypress, kiedyś Spansion: S25FL512Sxxxx to 512Mbit albo 64MB NOR Flash z interfejsem QSPI, Dual line or single line SPI. Inna opcja to N25Q512xxxx. Nie znalazłem pamięci o większej pojemności, które mogą współpracować z kontrolerami QSPI w STM32. Albo są podwójne NCS, ale pojedyncze linie danych, albo są to układy z zupełnie innym interfejsem....
Może raczej odpowiedz, z jakiego to powodu chcesz dane umieścić w pliku .h ,a nie .c? Ja tego zupełnie nie rozumiem. Jedyny powód - to łamanie na siłę konwencji przyzwoitego pisania programów (kompilacja samego pliku nagłówkowego nie powinna powodować utworzenia ani bajta kodu ani danych). Wkompilować dane pod określony adres możesz tylko drugim sposobem...
Do tego pierwszego linku dotarłem, i skopiowałem pliki eeprom.h i eeprom.c. Niestety pokazało mi błąd bo używam HALa a tam chyba był SPL. Wystarczy w odpowiednim miejscu zastąpić #include "stm32f0xx.h" na #include "stm32f0xx_hal.h" ? . Nie wystarczy, bo jest też kwestia użycia innych funkcji sprzętowych (zapis i kasowanie FLASH). Może jednak prościej...
Uruchomiłem kod, który wkleiłeś. Dopisałem tylko definicje dla Bank_NAND_ADDR ( 0x70000000 ), CMD_AREA ( 0x00010000 ), ADDR_AREA ( 0x00020000 ) i DATA_AREA ( 0x00000000 ). W funkcji FSMC_NAND_ReadID() pominąłem zapis do struktury i odczytuję zmienną data - mam w niej prawidłowe dane. Dodano po 8 Może nie włączyłeś taktowania dla FSMC? Ja mam to w innej...
http://obrazki.elektroda.pl/5451075700_1... Jakikolwiek ST-Link (tutaj St-LinkV2 z płytki testowej). Ustawienie tej opcji powoduje zablokowanie odczytu z FLASH aż do pełnego skasowania pamięci do 0xFF. Poniżej jest tabela z prawami zapisu do stron pamięci flash. Ustawienie tych opcji powoduje brak możliwości zapisu do pamięci flash...
(at)Monys Widzę że jak nie gotowca to nie pójdzie. Dałem Ci link do dokumentacji. A tu masz gotowca: [syntax=c] int EraseFlash(uint32_t address, int lockatexit) { if(address & 2047) return -1; // must be 2048 bytes aligned if(FLASH -> CR & FLASH_CR_LOCK) { FLASH -> KEYR = 0x45670123; FLASH -> KEYR = 0xCDEF89AB; while(FLASH -> CR & FLASH_CR_LOCK) {/*...
Czy poprzez podanie adresu zmiennej która jest we flash'u rozumiesz podanie adresu zmiennej utworzonej w ten sposób? volatile short int d; volatile short int *c = &d; Jak mam się dowiedzieć jaki numer strony muszę podać do skasowania? Po podaniu 50 strony program nie wychacza ale to przypadek. FLASH->AR = 0x08028800;
Przy 40kB zastanów się jednak nad zastosowaniem zewnętrznej pamięci np. flash SPI typu M25Qxx, W25Qxx, AT45DBxx. Strony w STM32F1 są dość małe (2kB) do tego w emulacji używasz 2 stron na 2kB danych. Kasowanie takiej ilości też trwa kilka sekund. Sprawa naprawdę do przemyślenia.
Nie ma właśnie nic więcej wspomniane o tym, przewija się raz jeszcze na początku ta fraza, ale żadnego objaśnienia Jest w DS objaśnienie (koło strony 500, "Theory of Operation" ) The EEPROM operates using a traditional Flash bank model which implements EEPROM-type cells, but uses sector erase. Additionally, words are replicated in the pages to allow...
Tylko zapis/odczyt tablic z parametrami wczytywanymi do ramu na początku programu
w caałym kodzie nigdzie nie jest ponownie uruchamiane zabezpieczenie stron. Jak usuwam zabezpieczenie - tak go niema i sprawdzając programem ulink zgadza się - zabezpieczenie zapisu stron jest cały czas wyłączone .
Nie znam takiego sposobu. Ale jak potrzebuję to korzystam z fajnego narzędzia Freescale Embedded GUI Converter Utility. Tworzy on dla danego obrazka plik c i h i ma sporo możliwości jak sposób zapisu 8/16bit, kompresja itp. Ewentualnie bardziej karkołomny sposób jak konwersja WinHex-em za pomocą copy block->C source.
Możesz przekonwertować plik na tablicę C (jest wiele narzędzi, poza tym to max kilkanaście linii w większości języków). Albo wygenerować od razu plik obiektowy i zlinkować z programem. arm-none-eabi-objcopy -I binary -O elf32-littlearm --set-section-flags .data=alloc,load,data,readonly --rename-section .data=.rodata plik.bin plik.o Dodaj plik plik.o...
Mam jeszcze pytanie odnośnie samego działania SWD i programowania... Jeśli BOOT0 = 0 to startuje ten kod który jest we Flash. Jak to się dzieje, że mimo działającego programu OpenOCD potrafi przerwać jego pracę i zacząć wgrywać program ? Jeśli dobrze doczytałem to jest to tylko możliwe jeśli są włączone sygnały SWDIO i SWCLK ? i drugie pytanie: Jeśli...
Działać będzie bez problemu. oczywiście że potrzebny będzie system plików jeśli chcesz na karcie umieszczać pliku zapisując kartę wcześniej na komputerze. Dodatkowo będzie potrzebny stos TCP/UDP/IP no i rzeczony serwer FTP. Można ruszyć w kierunku darmowego uIP. Nie lubię tego uIP bo napisany jest chyba przez konia ale da się zrobić i TCP i FTP/HTTP....
Nie. Architektura ARMv7-M obsługuje niewyrównany dostęp 16 i 32bitowy. Tylko dostęp na słowa większe niz 32bity (LDRD/STRD, LDM/STM) z niewyrównanym do 4 bajtów adresem rzucają fault. Inna sprawa, że w STM32 SFRy ogólnie nie lubią niewyrównanych zapisów lub zapisów o szerokości innej niz sam SFR. Ale to się nie kończy faultem, tylko dziwną wartością...
Bardzo często EEPROM jest emulowany w pamięci FLASH w sposób niewidoczny dla użytkownika. Nie można emulować funkcjonalności takiej jak wytrzymałość na ilość cykli zapisu/kasowania albo możliwość nadpisania pojedynczego bajtu. Jak nie można? Potrzeba 1kB EEPROM 100'000 zapisów (jak np w AVR), przeznacza się na pamięć 10kB FLASH, która ma ograniczenie...
Write protection jest ustawiany przez tzw. Option Bytes - najłatwiej chyba będzie go (jednorazowo) usunąć poprzez bootloader i programi Flash Loader Demonstrator albo przez JTAGa i OpenOCD - są specjalne komendy do tego celu. W nocie od ST - PM0042 Reading/programming the STM32F10xxx embedded Flash memory - jest opis sposobów odblokowania, u mnie strona...
Strona ST. Emulacja eepromu.
Okazało się, że podszedłem do tematu z niewystarczającą wiedzą. Przed każdym zapisem, należy określony sektor wyczyścić instrukcja Sector Erase. Chcialbym móc kasować pojedyncze komórki i aktualizować tam niektóre dane, jednakże pamięci flash tego nie umożliwiają, cóż coś za coś. Może uda się niektóre zmienne zapisywać do flashu procesora. Coś wymyślę,...
Zaraz będzie, że krytykuję albo się naśmiewam, ale widzę tutaj poważne braki w wiedzy. I właśnie na to liczę, że ktoś mi wytknie braki w wiedzy ;) Wiem, że SSD1289 wypada słabo w porównaniu z konkurencją. Nie mogę się zgodzić natomiast co do zawężania obszaru. Jest to jak najbardziej możliwe w tym układzie. Rejestry 0x44, 0x45, 0x46 umożliwiają zawężenie...
Jeśli te funkcje zwracają status, to proponuję sprawdzać jaki dokładnie - DATA_EEPROM_Unlock(), DATA_EEPROM_Lock(), a zapewne też przez FLASH_ClearFlag(). 4\/3!!
INFO: a reset or power cycle is required for the new settings to take effect. A to zrobiłeś po zastosowaniu komendy w OpenOCD? Najlepiej odłączyć całkowicie zasilanie. Jeśli masz możliwość, to zobacz co jest zapisane w option bytes.
Masz zaj***ty kwarc skoro: 1) potrafi podjac sam decyzje na jakiej predkosci wstanie (inteligentny, nie?) 2) ma wbudowanego PLLa (??) 3) Szybki ten twoj kwarc... Rozroznij ZEGAR mikrokontrolera od KWARCU na podstawie ktorego generowany jest ten zegar... Skoro twoj mikrokontroler WSTAJE, ale czasami na 8MHz a czasami na 72MHz, to HSE rusza zawsze, ale...
Z tym rzutowaniem to wolę jednak "ręcznie" to robić....jakoś tak wydaje mi się bezpieczniej. U mnie akurat sizeof zawsze będzie mniejsze niż 256 gdyż jest to po prostu ilość bajtów do zapisania jednej zmiennej/tablicy/struktury i nie zamierzam robić większych :wink:. Biblioteki z ST są zakręcone..niestety. Zaletą mojego pomysłu jest to że struktura...
Myślałem żeby załaczyć Ci mój projekt ale - 1. jest komercyjny 2. jest zbyt myślę złożony Tak że na szybko sama idea - jest to zrobione w 5 minut i skrypt linkera powinno sie przerobic lepiej. Funkcje też są do kitu - bo parametry trzeba przekazywać wskaznikiem do nich) wtedy nie jesteś ograniczony ich ilościa itd itd. Nie jest to reentrant i bezpieczne....
0. Konfiguracja FMC wymaga poprawy. Wszystkie czasy masz ustawione domyślnie, więc interfejs niepotrzebnie czeka z wykonaniem każdej operacji. Popatrz na parametry MEMxSET, MEMxWAIT, MEMxHOLD i porównaj z tym co może pamięć. Przykład: MEMxSET jest ustawiony na 0xFC, czyli jakieś 252 x 4,63ns = 1,16us. Pamięć potrzebuje około 20ns -12ns = 8ns. Dostosuj...
W F030 strona ma wielkość 1kB co oznacza, że zmieści się tylko 256 zmiennych Jak to obliczyłeś? Pewnie 1024/4 bajty = 256, ale tutaj tak to nie działa. Strona 1024 bajty to 1024 bajty, inaczej 512 półsłów. Zapis do stron pamięci w STM32F0 wymaga zapisywania półsłów, do jednej strony oczywiście można zapisać 512 półsłów. W poniższym przykładzie zapisuję...
No cóż... Trzeba było najpierw spojrzeć do dok. Rzeczywiście zapis 16b zajmuje od 40 do 70us więc w porywach wychodzi do 50kB, ale ciekawe jak zachowują się CW i O²CD przy zapisie 0xFFFF? Możliwe że CW pomija i do statystyki wlicza te dane, ale to nie znaczy że O²CD robi inaczej.
A są może gdzieś jakieś szczegóły tego rozwiązania (idea) w necie? Przeglądałem kilka not aplikacyjnych, ale rozwiązania tam pokazane bazują jedynie na zapisie "bloków" danych po kolei do FLASHa i szukaniu wolnego miejsca przy zapisie lub ostatniego zapisanego bloku przy odczycie. Czy rozwiązanie z tamtej książki jest tego samego typu? 4\/3!!
Dodam, iż problemem jest to, że program tak jakby znikał po zaniknięciu zasilania, gdyż po ponownym podłączeniu mikrokontroler nic nie robi. Sprawdź czy BOOT0 (pin 60) masz konkretnie gdzieś podłączony (zworka, rezystor na masę). Zweryfikuj pamięć flash za pomocą STlink Utility czy masz w niej ten program, który wcześniej zapisałeś. A może masz po...
Kontroler karty operuje na sektorach 512B nie blokach 128kB Czytaj uważnie. Ja pisałem o blokach w pamięciach NAND flash, a nie o tym co emuluje kontroler karty SD. Zbych_: skąd masz taką informację? Z lektury datasheetów pamięci NAND flash, które są wkładane do kart SD, np. pamięci ST (obecnie numonyx) 8Gb (1GB) mają bloki w rozmiarze 128kB.
Jak już korzystasz z bibliotek ST to masz chociażby funkcje: FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data) i FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data) Operując na wskaźnikach możesz tam zapisać zmienne dowolnego typu, czy całe struktury.
Witam, czy ktoś z forumowiczów wie jak umieścić w pamięci flash tablicę z wartościami przeskalowanego sinusa (wartości stałoprzecinkowe). Chcę, aby tablica miała np. 1024 elementów (od 0 do 2pi) dla tego zapis na sztywno wartości będzie nie wygodny. tj. [syntax=c]const s16 tab_sin[1024] = {wartosci}[/syntax] Wolałbym zapis: [syntax=c]const s32 tab_cos0[1024]...
Według manuala sektor 2 jest w przedziale 0x08008000 - 0x0800BFFF i ma 16 Kb
Patrząc na plątaninę powyżej, przypomina mi się podobny problem który kiedyś miałem. Występował on przy transmisji SPI z układem podpiętym do STM32F0DISCOVERY przy użyciu kabelków. Probiem zniknął dopiero wtedy, gdy dodałem pętlę mas... Jeśli masz tam już pętlę mas, to ją usuń. Jeśli jej nie masz, to spróbuj ją dodać... No i z racji kabelków, ustaw...
Embedded flash brzmi dokładnie tak samo jak zielona trawa. To tak jakby wątek był o rodzajach trawy a byś rozprawiał o tym tym dlaczego jest zielona. A co do aluzji do AVR, to tylko niektóre wynalazki muszą czytać flash za pomocą dedykowanych instrukcji i w tym przypadku ten wątek też nie jest o tym. W w AVR też masz pamięć "embedded" flash na kod i...
Wyczyszczenie tych cache to kilka linijek kodu i kilka taktów - nieporównywalnie mniej niż czas zapisu/kasowania. Po co ryzykować, że jednak coś będzie bez tego kasowania dziwacznie działało? Generalnie jest tak jak piszesz, że w niektórych przypadkach jest to zbędne. Tylko czy koszt skasowania tych cache jest na pewno wyższy niż koszt analizy czy takie...
Przykład na STMa: http://www.st.com/en/embedded-software/s...
Dzięki :) - właśnie tak wywnioskowałem z pliku *.h i napisałem coś takiego - chyba działa. Dziwi mnie tylko brak konsekwencji w nazewnictwie. Dodano po 1 Dalsze problemy: Nie potrafię nic zapisać do skonfigurowanej pamięci (LCD). Kontroler LCD nie jest fizycznie podpięty ale to chyba nie ma znaczenia. Podejrzewam,że należy załączyć stosowny bank pamięci...
Ja tak obecnie robię w STM32, tyle że na tych prockach zapis do pamięci Flash jest bardziej niż prosty, na LPC2xxx jest gorzej, a na Atmelach nie wiem jak jest. Generalnie można wykorzystać sprytne algorytmy "wear leveling" i pamięć jest praktycznie nie do zajechania... pdf: http://www.st.com/mcu/download2.php?file...
Niestety "wymuszenie" zapisu kończy się błędem. [syntax=bash]Reading symbols from /home/marek/workspace_CDT/bitbus_SLAVE_C... symbol-file /home/marek/workspace_CDT/bitbus_SLAVE_C... load /home/marek/workspace_CDT/bitbus_SLAVE_C... Loading section...
Co ty za bajki opowiadasz? to tablicy unsigned charow w flashu stm32 juz nie mozna trzymać? Co cie obchodzi szerokość słowa flash do zapisu , skoro tabelkę 'progmem' constów masz w RO? Kompilator sie martwi jak umieścić tą tablicę. Morzesz mu narzucić makefile'em region/sekcje w której chcesz mieć tą tablicę. Gdzie jest problem? To, że ci nie działa...
Po pierwsze chciałbym powiedzieć, że nadwyrężenie pamięci flash jest raczej problematyczne - ile razy uda Ci się ją zaprogramować zanim dobijesz do tych 10000 czy 100000 zapisów? Po drugie - http://www.elektroda.pl/rtvforum/viewtop... 4\/3!!
Witam!!! Piszę program w języku C pod uC STM32F105 Zastanawiam się na rozwiązaniem takiego problemu a mianowicie: Chciałbym zdefiniować stałą, która będzie umieszczona w pamięci programu, a więc trafi do pliku .hex, który ładowany jest do flasha. Stałą będzie tablica znaków zawierająca poszczególne litery tekstu np: "Autor: Andrzej Brzozka" w programie...
Przykładowy linker dodany do cubef4 dla mikrokontrolera np. stm32f439NI ma tak podzielone obszary pamięci: We fragmencie kodu który pokazałeś widać "jak na dłoni", że pamięć flash _NIE_ jest podzielona, więc nie wiem w czym problem... Czy używając pamięci 2MB z dual bankiem mogę zapisać program na obydwu obszarach pamięci bez żadnych dodatkowych kroków...
Cześć :) W związku z tym, że w miejscu w którym pracuję istnieje potrzeba programowania pamięci SPI których wsad jest taki sam, stwierdziłem że zbuduję urządzenie, które będzie kopiowało zawartość jednej kości do drugiej. Niby nic, ale z czasem chciałbym zająć się zawodowo projektowaniem oraz programowaniem mikrokontrolerów, więc jako pierwszy projekt...
Cześć, wczoraj testowałem program do zapisu danych w pamięci FLASH na STM32F051r8, korzystałem z programu przedstawionym w tym [url=http://www.elektroda.pl/rtvforum/to... Porgram jest pod STMa F103, który ma 128 kb pamięci, a mój tylko 64 no i przez przypadek nie zmieniłem adresu pod który maja być zapisywane dane, a więc pozostał...
No to masz przyczynę. Proponuję sprawdzić czy któraś strona nie jest zabezpieczona przed zapisem ("flash protect 0" chyba). Warto skasować option bytes (całe). Ewentualnie można próbować z narzędzia ST pokasować wszystko równo, choć na Linuxie (czy co tam masz (; ) pewnie nie działają. 4\/3!!
Musisz ustawić bajt RDP pod adresem 0x1FFFF800 (option byte). Oczywiście wcześniej należy umożliwić sobie zapis pod ten adres. Wszystko jest opisane w PM0042. Być może w CMSIS udostępnione są jakieś gotowe funkje, ale to może wypowie się ktoś bardziej doświadczony. Jak sobie nie poradzisz z manualem to powalczymy razem :D
Programować Flash się da Boot0 jest ściągnięty do masy Programu nie da się wgrać. IDE to CooCox CoIDE. Wcześniej przy wgrywaniu programu pojawiał się komunikat o pomyślnym wyczyszczeniu pamięci, pomyślnym wgraniu i pomyślnym restarcie Teraz nie pojawia się nic, poza wywołaniem programu który ma to zrobić. I nie jest to wina IDE bo w STLink Utility jest...
1. strona jest kasowana i sprawdzana przed zapisem czy jest czysta (po skasowaniu tez). 2. zapisy nie przekraczają granicy strony 3. zapisywane są dane 4. zakres ustawiony w pliku linkera poza granicami wykonywalnego kodu 5. zapis z RAM - w funkcji zapisu bloku wyłaczam przerwania na czas zapisania całego obszaru (po kilnanascie bajtów) i weryfikacji...
Witam. Mam pewnien problem z nową wersją OpenOCD 0.1.0. Chodzi o uruchamianie komend ze skryptów, przykładowo chcę uzyc komendy zapisu do flasha : flash write_bank 0 main.bin 0 komenda znajduje się w pliku .script dołączanego do pliku konfiguracyjnego stm32.cfg który z kolei wywoływany jest jako argument przy uruchamianiu OpenOCD. Niestety OpenOCD zwraca...
W jakiś sposób udało (?) mi się zainstalować bootloadera do mojego MC. Wygląda na to, iż Blinkiem arduino IDE działa. Nie napisałeś w jaki sposób podłączasz Blue Pill do komputera podczas programowania, bo opcji jest kilka. Co prawda nie jestem w stanie odtworzyć tej Twojej sytuacji u mnie, bo mnie osobiście zupełnie nie interesuje co jest wgrane do...
Pamięć NAND nie jest mapowana w przestrzeń adresową FSMC. Pamięć NAND wymaga wysyłania jej durnych rozkazów, i jest to ekwiwalentnie pokręcone jak obsługa kart SD/MMC (tyle że prościej). Dodatkowo zapomnij, że będziesz sobie w stanie tą pamięć ot tak zapisywać jak słowo pod wskaźnik do RAMu czy FRAMu. FSMC definiuje ci tylko adresy pod które mozesz...
Każdy pojedynczy zapis w obrębie 1 strony flash wymagający ustawienia dowolnego bitu na '1' oznacza skasowanie całej strony flasha i jej przepisanie z nową wartością. Co zabija flash? Jego kasowanie...
Z kolei modyfikacja skryptu linkera ma tą wadę, że jeśli przeniosę kod na inny MCU to znowu bedę musiał ten skrypt modyfikować. Emulacja oparta na czystm C po prostu zadziała. No... bo każdy mikrokontroler ma dokładnie ten sam rozmiar strony i dokładnie ten sam kontroler pamięci, więc z pewnością zadziała Ci ten kod bez żadnych zmian... Ehe... Kupę,...
U mnie biblioteka działa. Też na F0.
(bo z nieznanych mi jeszcze powodów nie zapisują sie poprawnie mimo braku zgłaszanych błędów programowania) Raczej z tym bym się proponował zmierzyć - szukać przyczyny i błedu w swoim kodzie niż jakieś dziwne kombinacje.
Jeżeli chodzi o ffconfig.h to próbowałem różnych ustawień a z desperacji ;) nawet zupełnie kosmicznych ich kombinacji. Jeżeli chodzi o ustawienia kompilatora to -O0 -> prawie najnowszy bleeding edge toolchain. Przed każdym buildem robię clean'a. Dodam, że dzieje się to na dwóch różnych kartach. Próbowałem też z różnymi typami zmiennych a uchwyt systemu...
No więc tak. Przy opcji FLASH_TYPEERASE_MASSERASE fragment funkcji HAL_FLASHEx_Erase if (pEraseInit->TypeErase == FLASH_TYPEERASE_MASSERASE) { /* Mass erase to be done */ FLASH_MassErase(pEraseInit->Banks); Mass Erase to kasowanie całej pamięci Flash kasuje komórki pamięci w bank 2. W jakim celu kasujesz całą pamięć przed zapisaniem każdego małego...
Ustawienia zostają w wewnętrznym "EEPROM" - a raczej symulowanym bazującym na zapisie w pamięci FLASH. Producent dostarcza do tego bibliotekę, aczkolwiek jest ona zbyteczna - warto używać bezpośredniogo zapisu do FLASH za pomocą bibliotek peryferii. Zaoszczędzi się trochę miejsca jeśli to wymagane. Ale wracając do zegara, który odpowiada za włączanie...
Dziękuje za szybką odpowiedź W swojej aplikacji chciałem wykorzystać jakiegoś stm32 więc bœdę mógł skorzystać ze sprzętowego CRC tmf mógłbyś podać jakie inne sposoby można stosować do sprawdzania integralności ? Słyszałem jeszcze o March C ale to wymaga zapisu komórki więc nie bardzo wg mnie nadaje się do pamięci Flash. Pozdrawiam
Przetestowałem PVD i ANALOGWATCHDOG. -PVD przy skonfigurowaniu na przerwanie przy 2,9 V generuje je dopiero przy ok 2,5 V. -ANALOGWATCHDOG rzeczywiście dobrze działa. Ustawiłem go tak by generował przerwanie przy ok 3 V. Niestety nie rozwiązało to mojego problemu, gdyż jak zmierzyłem czas potrzebne do zapisania całej strony flash (1 kB) to potrzebuje...
Po wymianie pamięci na Am29LV640MB zapis ruszył, jednak zapisuje max 4KB. Każda próba zapisu większej ilości danych kończy się komunikatem : Error: flash write block failed status: 0x0 Error: error writing to flash at address 0x64000000 at offset 0x00000000 Runtime Error: flash1.script:8: in procedure 'script' at file "embedded:startup.tcl",...
Mam przed sobą Cortex™-M3 Revision r2p1 Technical Reference Manual i tam napisane jest iż MLA trwa dwa cykle a np ADD, MUL jeden czyli ja zysku nie widzę przy wykorzystaniu tego rozkazu (Czasowego bo to tylko chyba objętościowy zysk). Staram się w sposób świadomy pisać w C tak aby kod wykonywał się jak najszbiciej. ale jeśli nie ma różnicy w czasie...
Pytam jak ją skasować. do czego tu kod. (nie posiadam funkcji przy sobie)! Nie ma sensu próbować kasować flagi OVR, skoro znacząco prościej jest nie dopuścić aby została ona ustawiona. Osiągasz to przez odczytanie DR dokładnie tyle samo razy ile go zapisałeś. Drugie, po co mam czytać 6 bajtów skoro ich nie ma. To jak w NRF24L01, nadając coś zawsze...
Próbuję napisać obsługę pamięci AT45DB041D. Komunikacja z układem jest, ale zapis i odczyt nie działa poprawnie. Dane w pamięci zapisywane są w dziwnej kolejności. Podczas odczytu pokazuje tak jak bym odczytywał strony 0,2,2,6,4,10,6,14,... [syntax=c] uint8_t flash_busy() { uint8_t status; cs(); spi_put(0xd7); status=spi_get(); cd(); if(status&&0x80)//gdy...
W jaki sposób to się odbywa skoro MCU ma RDP level 1 Twój program może sobie pisać w dowolnym RDP do FLASH. Tylko firmowy bootloader nie działa. Musisz sobie napisać własny. dodatkowo bootloader jest nienaruszony podczas aktualizacji oprogramowania, bo urządzenie jest "żywe" podczas tej operacji (świecą i migają diody). No i co w tym takiego nadzwyczajnego....
Ok więc o co mi chodzi. - Plik wejściowy BMP lub co kolwiek - Format zapisu do LCD RGB 565 (np. zielony to 0x07E0) - Plik wyjściowy np. abcd.c - Obraz zapisywany w pamięci FLASH i wysyłany do LCD. Chodzi mi o zamianę pliku bmp na RGB 565. Dalej już myślę ze sobie poradzę.
o no widzisz, opanowales temat ;) co do stlinka nie pomoge, nigdy w zyciu go w rekach nie mialem... wprowadzając w programie blokadę SWD i JTAG Znam to ;] Jednak jesli chcesz maximum security, to dopisujesz druga instrukcje w rozbiegowce (tuz po inicjalizacji stosu) ktora wylacza SWD/JTAG (jeden zapis stalej pc-relative do AFIO->MAPR). Wtedy jest hardcore...
Jeśli nie chce używać rejestrów backupowych to zostaje Tobie tylko zapis do flasha. Twój uC ma 128KB flash, chcesz zapełnić całą pamięc programem? Zakłożę się, że nie, więc nie widzę problemu z poświęceniem mniej niż 1% pamięci na tą flagę. Inny sposób to zapis wybranej komórki EEPROMA jakąś znaną wartością po pierwszym zaprogramowaniu uC. Przed każdym...
Zrobiłem coś takiego: - buforuję transmisję do STM32 (10 ramek * 400B = 4KB) i wtedy wykonuję zapis Niestety zapis na kartę 4KB trwa więcej niż 1 sekundę (raz na kilka minut) i mam overrun transmisji do STM32. A nie myślałeś, żeby łączyć się z kartą przez DMA? Wówczas odpalasz transfer tych 4KB i o nim zapominasz, idzie sobie asynchronicznie do programu....
Problem polega na tym, że po padzie zasilania procek się zablokował na jakiekolwiek próby zapisu. Próbowałem wielu rzeczy, ale nic nie pomogło. Procesora nie da się zaprogramować. Próby zmiany "Option bytes" poprzez st-link utility kończą się tak: 15:29:23 : Could not set Option bytes! Please reset the target and retry. Procesor komunikuje...
https://obrazki.elektroda.pl/9462291700_... Chciałbym zaprezentować rozwinięcie eksperymentalnego odbiornika SDR, jaki opisałem ostatnio: https://obrazki.elektroda.pl/6947080100_... https://obrazki.elektroda.pl/7046555300_... Najbardziej w tym momencie interesującym fragmentem płyty jest głowica: https://obrazki.elektroda.pl/9911930900_...
bo SD każdy użytkownik może sobie wyjąc i odczytać, a chciałem utrudnić taką zabawę :) W takim razie lepiej chyba dać do flash-ki ale bez systemu plików. Komunikaty nie muszą mieć stałej długości, zawsze można na początku zrobić tabelkę z adresami poszczególnych komunikatów żeby miejsca nie marnować i móc zapisywać dowolnej długości komunikaty (oczywiście...
Przyznam się że nigdy takich rzeczy nie robiłem (zawsze kod mi się mieścił we flash'u) a jak brakowało to na kartę lądowały przeważnie tablice, dane etc. Wydaje mi się że taką funkcję należałoby najpierw skompilować i później zapisać na dysku, po wgraniu takiego pliku w RAM , mając wskaźnik na te dane wystarczyłoby go wywołać. Należałoby też zapewne...
Hmm, chodzi o to, że Level 1 to cokolwiek oprócz 0xAA i 0xCC, czyli również 0xFF? Właśnie we flash programming manual to jakoś tak tajemniczo i krótko było opisane ;) Bo pomyślałem sobie jeszcze, że może jest odczyt bieżących RDP, WRP, Data0 itp., potem erase i zapis nowych, po czym dopiero po Launch (czyli chyba de facto soft reset?), jeśli RDP się...
Konfiguracja FSMC Dodano po 2 Chyba sam znalazłem rozwiązanie: FSMC_BCR1->WREN = 1
...Ale tylko 30DMIPS :] Za mało, niestety... >tmf To akurat, że sporo ARMów nie ma wyprowadzonej magistrali, jest zaletą. Nie zawsze chce się uzywac 80 lub 100pin potwora. Dla porownania, taka mega32 tez zewn. magistrali nie ma... Zasadą jest, że powinno się dobierać procesor do zastosowania , a nie dobrać na pałę, a potem narzekać... Poza tym - na...
stm32 zapis flash stm32 flash zapis zapis pamięć flash stm32
stojan motocykl satel bateria integra piaskowanie ścierniwo
renault mascott schemat silnika renault mascott schemat
Ustawienie iglicy w gaźniku skutera 4T 80cc GY6 – regulacja mieszanki, klips, objawy LG TV – gdzie znaleźć numer EBT na płycie głównej? Lokalizacja etykiety, modele, oznaczenia