Flash AT25SF041

Všetko čo sa týka mikropočítačov + Sekcia Arduino

Moderátori: psichac, Moderátori

bibibo
Pokročilý člen
Pokročilý člen
Príspevky: 625
Dátum registrácie: 05 Nov 2009, 00:00
Bydlisko: Bratislavský kraj

Flash AT25SF041

Príspevok od používateľa bibibo » 14 Sep 2017, 23:22

Prosim, potreboval by som trochu poradit. Som v C++ zacitocnik a neviem ako pouzivat funkciu pre zapis a citanie externej flash.
Funkcie su nasledovne

Kód: Vybrať všetko

void AT25SF041::ReadArray(uint32_t address, uint32_t length, uint8_t *buffer)
{
    DF_CS_inactive;    /* Make sure to toggle CS signal in order */
    DF_CS_active;      /* to reset Dataflash command decoder     */

    /* Send opcode */
    spi_transfer(READ_ARRAY_HF);
    
    /* Address (page | offset)  */
    spi_transfer((uint8_t)((address >> 16) & 0xff));
    spi_transfer((uint8_t)((address >> 8) & 0xff));
    spi_transfer((uint8_t)(address & 0xff));
    spi_transfer(0x00);
    
    for(int i=0; i < length; i++){
        buffer[i] = spi_transfer(0x00);
    }

}

void AT25SF041::WriteArray(uint32_t address, uint32_t length, uint8_t *buffer){
    DF_CS_inactive;    /* Make sure to toggle CS signal in order */
    DF_CS_active;      /* to reset Dataflash command decoder     */

    /* Send opcode */
    spi_transfer(PROGRAM);
    
    /* Address (page | offset)  */
    spi_transfer((uint8_t)((address >> 16) & 0xff));
    spi_transfer((uint8_t)((address >> 8) & 0xff));
    spi_transfer((uint8_t)(address & 0xff));
    
    for(int i=0; i < length; i++){
        spi_transfer(buffer[i]);
    }
    
    EndAndWait();
}


Netusim ake hodnoty mozem priradit premennej address.
V manualy pisu, ze po zapisu opcode nasleduju tri bajty,ktore v tych funkciach su, ale nejako neviem sa dopocitat o ake hodnoty ide. Skratka nemam skusenost s tymi shiftami.
0

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Flash AT25SF041

Príspevok od používateľa peterple » 15 Sep 2017, 00:24

adresa môže byť akákoľvek z platného adresného rozsahu (teda 0 - 0x3FFFF). Zapisovať sa dá po stránkach alebo aj po bytoch. Tá funkcia na zápis asi píše po stránkach. Výhodné je preto začínať na začiatku stránky (0xXXX00) a zapisovať jednu celú stránku. Ale nie je to podmienka píšu že pamäť vie zapisovať aj neúplné stránky. O správný výpočet tých troch adresných bytov sa práve starajú tie posuny. Nič zložité to nie je. Posunie sa to o daný počet bitov doľava a potom sa andom odreže všetko nad dolnými ôsmimi bitmi. takže ti zostane práve ten byte ktorý treba vyslať.
V jednom volaní môžeš zapísať max 256 byte a nesmieš pretiecť do nasledujúcej stránky.

Edit: Zapisovať sa dá iba prázdna stránka. Môže sa zapísať nekompletná. a rotácia je samozrejme opačne, teda doprava.
Lepšie dať hneď link na datasheet. Lebo to potom takto dopadne že jeden píše o voze a druhý o koze.
0
Naposledy upravil/-a peterple v 15 Sep 2017, 09:06, upravené celkom 1 krát.
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

bibibo
Pokročilý člen
Pokročilý člen
Príspevky: 625
Dátum registrácie: 05 Nov 2009, 00:00
Bydlisko: Bratislavský kraj

Re: Flash AT25SF041

Príspevok od používateľa bibibo » 15 Sep 2017, 08:05

Ahoj, diky za reakciu. chcem sa opytat, kde si zobral hodnotu 0x3FFFF ? Nemalo by to byt 0 - 0x7FFFF ?
Stale vsak nerozumiem tym shiftom. Dajme tomu, ze chcem zapisat 256 bytov od adresy 0x000100. Ide teda o jednu stranku ? Co spravia tie shifty s adresou 0x000100 ?
0

Používateľov profilový obrázok
Kado
Power user
Power user
Príspevky: 1625
Dátum registrácie: 02 Sep 2007, 00:00
Bydlisko: PB
Vek: 40

Re: Flash AT25SF041

Príspevok od používateľa Kado » 15 Sep 2017, 08:45

kezde spi posiela po 8bitoch tj, jeden bajt, tak tu tvoju adresu treba rozsekat na jednotlive bajty, o to sa staraju tie posuny
0
Návrh zapojení s jednočipovými mikropočítačmi, tvorba programového vybavenia pre mikropočítače
http://www.jk-elektronika.info/index.html

predaj !!
http://svetelektro.com/modules.php?name ... 54#p549154

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Flash AT25SF041

Príspevok od používateľa peterple » 15 Sep 2017, 08:49

Áno máš pravdu rozsah adries je 0 - 0x7FFFF. Včera mi našlo nejaký pdf kde sa písalo že má 2Mbit. Ale boli tam iné písmenká na konci. Ešte aj ten smer som napísal na opak.
Ano bude to jedna stránka. Konkrétne druhá od začiaktu pamäte. Kedže dolný byte adresy je 00 tak začínaš na začiatku stránky.
shifty urobia toto - pre názornosť binárne

Kód: Vybrať všetko

((address >> 16) & 0xff));  //0000 0000 0000 0000 0000 0001 0000 0000 vysledok 0000 0000 
((address >> 8) & 0xff));   //0000 0000 0000 0000 0000 0001 0000 0000 vysledok 0000 0001
(address & 0xff));          //0000 0000 0000 0000 0000 0001 0000 0000 vysledok 0000 0000

v poslednom výpočte sa nič neposúva iba sa odreže všetko nad prvým byte. V predchádzajúcich dvoch sa to posunie o 16 alebo 8 bitov doprava a až to posunuté sa odreže.
Inak si myslím že to rezanie si mohli odpustiť a aj tak by to bolo dobre. Odrezanie by zariadilo to pretypovanie. Ale takto je to prehľadnejšie.

ešte inak to čo je modré je to čo prežije ten and.
((address >> 16) & 0xff)); //0000 0000 0000 0000 0000 0001 0000 0000 vysledok 0000 0000
((address >> 8) & 0xff)); //0000 0000 0000 0000 0000 0001 0000 0000 vysledok 0000 0001
(address & 0xff)); //0000 0000 0000 0000 0000 0001 0000 0000 vysledok 0000 0000
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

bibibo
Pokročilý člen
Pokročilý člen
Príspevky: 625
Dátum registrácie: 05 Nov 2009, 00:00
Bydlisko: Bratislavský kraj

Re: Flash AT25SF041

Príspevok od používateľa bibibo » 15 Sep 2017, 09:49

Ahoj,
no uz mi to je trochu jasnejsie. Este rozmyslam nad tym and. To je binarne scitanie ? Nejako mi to nevychadza.
0

maskrtnik01
Ultimate člen
Ultimate člen
Príspevky: 2562
Dátum registrácie: 20 Júl 2010, 00:00
Bydlisko: okolie KE
Vek: 27

Re: Flash AT25SF041

Príspevok od používateľa maskrtnik01 » 15 Sep 2017, 10:40

0

Používateľov profilový obrázok
Kado
Power user
Power user
Príspevky: 1625
Dátum registrácie: 02 Sep 2007, 00:00
Bydlisko: PB
Vek: 40

Re: Flash AT25SF041

Príspevok od používateľa Kado » 15 Sep 2017, 10:51

to bude tazke s tebou, ked ti ani AND nic nehovori...aky prog. jazyk ovladas? Hore pises nieco o C++
0
Návrh zapojení s jednočipovými mikropočítačmi, tvorba programového vybavenia pre mikropočítače
http://www.jk-elektronika.info/index.html

predaj !!
http://svetelektro.com/modules.php?name ... 54#p549154

bibibo
Pokročilý člen
Pokročilý člen
Príspevky: 625
Dátum registrácie: 05 Nov 2009, 00:00
Bydlisko: Bratislavský kraj

Re: Flash AT25SF041

Príspevok od používateľa bibibo » 15 Sep 2017, 11:34

praveze ziadny neovladam. Som taky samouk. Zacal som Basic potom trochu Python a teraz C++. Diky za odkaz.
0

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Flash AT25SF041

Príspevok od používateľa peterple » 15 Sep 2017, 11:35

To nesúvisí zo žiadnym programovacím jazykom alebo aj so všetkými. To je o tom že dnes netreba ovládať základné poznatky z číslicových techniky. A druhá vec je že dnes sa nikto neprehrá od invertora až po mikroprocesor, takže si to ani nevie predstaviť a potom to celé získava nádych mágie. Človek je pomerne jednoduchý - čomu nerozumie tak to musí mať na svedomí niečo nadprirodzené.

Na druhej strane potom nedokážu ľudia pochopiť že naozaj je to také jednoduché. Že pri rotácii nejde o nič len o to že sa tie bity posunú na danú stranu. Ten na konci sa stratí (zmizne) a na opačnej strane sa objaví nulový.

AND je logický súčin. Teraz ti to už dáva zmysel?
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

bibibo
Pokročilý člen
Pokročilý člen
Príspevky: 625
Dátum registrácie: 05 Nov 2009, 00:00
Bydlisko: Bratislavský kraj

Re: Flash AT25SF041

Príspevok od používateľa bibibo » 15 Sep 2017, 11:45

Ak to spravne chapem, tak 0xff je 1111 1111. Ked spravim logicky sucin s hodnotou po posune, tak vysledna hodnota je rovnaka, ako ta po posune. Mylim sa ?
0

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Flash AT25SF041

Príspevok od používateľa peterple » 15 Sep 2017, 11:58

Je to skoro tak. Ak sa nejaký bit logicky vynásobí jednotkou tak dostaneš hodnotu toho bitu. To je taký zákon z boolovej algebry

Kód: Vybrať všetko

A ∧ 1 = A
A ∧ 0 = 0
Ten divný znak tak sa zapisuje logický and v boolovej algebre.
Kedže tá hodnota po posune má 32bitov tak isto aj to ff má 32bitov. Výsledok logického AND teda nebude tá istá hodnota po posune ale bude to dolných osem bitov po posune. Všetky vyššie bity sa vynulujú práve pretože je tam ten AND.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

bibibo
Pokročilý člen
Pokročilý člen
Príspevky: 625
Dátum registrácie: 05 Nov 2009, 00:00
Bydlisko: Bratislavský kraj

Re: Flash AT25SF041

Príspevok od používateľa bibibo » 15 Sep 2017, 16:14

ok, diky. Rozumiem. Nejako mi to nedvalo zmysel, ze hodnoty, adresy su v hexa ale to spracovanie je v binary. No este sa mam co ucit.
0

Používateľov profilový obrázok
gfox
Stály člen
Stály člen
Príspevky: 194
Dátum registrácie: 12 Mar 2013, 20:16
Bydlisko: Lovinobaňa
Vek: 53

Re: Flash AT25SF041

Príspevok od používateľa gfox » 15 Sep 2017, 16:41

Hm. Ale veď je celkom jedno v akom formáte ty pri programovaní zapíšeš číslo, procesor si ho aj tak uloží v binárnom tvare. Veď inak to nevie. Princíp digitálnej techniky, len 0 alebo 1, iné číslice nie sú.
0

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Flash AT25SF041

Príspevok od používateľa peterple » 15 Sep 2017, 19:59

Je úpne jedno ako zapíšeš celočíselnú hodnotu. Každý jazyk má na to svoj zápis ale výsledok je ten istý.
Napríklad binárna kombinácia 0100 0001 sa dá zapísať:

65 = 0x41 = 0101 = 'A'

-- Spojený príspevok 15 Sep 2017, 19:22 --

Hexadecimálny zápis vznikol v dávnej dobe počítačovej techniky aby sa zefektívnil a sprehľadnil spôsob zobrazovania číslicových informácií. Zo začiatku sa komunikovalo s počítačom cez predný panel, vyzeralo to takto nejako:
Obrázok

žiadna klávesnica, žiadny displej, pár desiatok (stoviek) prepínačov a svetielok. Toto už je moderný počítač postanevý z TTL a indikácia pomocou LED. Bývalo to aj historickejšie.

Takto som to videl ja keď som začínal
Obrázok

Previesť binárne číslo na desiatkové nie je úplne jednoduché. Ale previesť dvojkové číslo do osmičkovej alebo šestnástkovej sústavy je jednoduché. Postačí na to jednoduchý TTL obvod - prevodník z BCD na sedemsegmentovy kód. Na jeho výstup pripojíš sedemsegmentovku a už zobrazuješ naraz štyri bity ako číslice 0 až F. Takže na zobrazenie 8 bitových dát stačia dve sedemsegmentovky. Na zobrazenie 16 bitovej adresy stačia štyri. A to je rozdiel než 24 led. Je oveľa prehľadnejšie zapisovať hodnotu adresy a dát v hexa. Ak je treba tak to rovno z hlavy po hodine používania budeš prevádzať bez problémov.

Určite si videl sám že zapisovať 32bitové čísla v binarnom tvare je dosť otrava pri písaní, a neprehľadné je to ako hrom. Hexa zápis je úsporný (úspornejší ako desiatkový) a prehľadný. Chce to jedinú vec pochopiť ten princíp. Nás to učili v druhom ročníku SPŠE vrátane boolovej algebry a rovnako aj všetky tie základné prvky ako hradlá, klopné obvody, muxy, sčítačky a tak.

Inak je to nepochopiteľná mágia.

Hexa zápis sa používa dodnes pre jeho výhody. Aj keď dnes na displej vieme nakresliť hocijaký čínsky znak.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

bibibo
Pokročilý člen
Pokročilý člen
Príspevky: 625
Dátum registrácie: 05 Nov 2009, 00:00
Bydlisko: Bratislavský kraj

Re: Flash AT25SF041

Príspevok od používateľa bibibo » 16 Sep 2017, 12:05

@peterple, ja som sa to tiez ucil, ale zvysoka som na to kaslal. Myslel som si, ze to nikdy nebudem potrebovat a ani ma to nebavilo.
Teraz si velmi rad programujem a ucim sa to znova.
Este otazka, v Tvojom prispevku si preskrtol vetu ohladom zapisu po strankach alebo bytoch. Je teda jedno, ci to zapisem po strankach alebo bytoch ?
0

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Flash AT25SF041

Príspevok od používateľa peterple » 16 Sep 2017, 20:01

nie je. Zapisovať sa dá len prázdna stránka. Môžeš zapísať nekompletne. A predpokladám že neskôr môžeš pokračovať tam kde si prestal. Ale už raz naprogramované miesto nie je možné zmeniť. Musí sa zamazať celá oblasť. Treba si poriadne prečítať DS. Ja som to len preletel.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

bibibo
Pokročilý člen
Pokročilý člen
Príspevky: 625
Dátum registrácie: 05 Nov 2009, 00:00
Bydlisko: Bratislavský kraj

Re: Flash AT25SF041

Príspevok od používateľa bibibo » 20 Sep 2017, 11:10

Diky moc. Velmi si mi pomohol.
0

Napísať odpoveď