SPI
Pavel Kutina
hw na prelude.cz
Středa Srpen 28 23:30:13 CEST 2013
Tak jak jsem psal o tom HW problemu, tak jsem si nejspis zase nabehnul,
tentokrat asi zcela ve Vasem stylu:
Opet (stale) Stellaris Launchpad, k nemu pripojuju na I2C modul s BMP085
(ano, psal jsem tu, ze je to mizerne cidlo, ale modul jsem mel po ruce, tak
jsem ho tam nadratoval) a valcim s komunikaci. Modul sam je v pohode, ma
vlastni stabilizator na 3.3V (teda uz ne, ale mel ho), nejaky ten
kondenzator, pull-upy na I2C. A jak to tak vidim, tady je asi problem:
Stellaris ma (narazil jsem na to vecer na nejakem foru, ale uz jsem nemel
cas to overit v datasheetu) na vsech portech, co na nich ma I2C,
nevypnutelne pull-upy. A mne se nedari zadne cteni z toho cidla. Ani chlup,
ciste nuly... Tak mam takove podezreni, ze pull-up v procesoru a druhy na
desce cidla nejak nemusi delat dobrotu...
Mimochodem - v dalsim levelu je pripojeni SD karty pres SPI, a jak jsem cetl
tohle vlakno, sel jsem rovnou z onoho cinskeho (hodne podobneho) modulu
odpajet vsechny odpory z tech delicu, lepsi, nez na to zapomenout jako u
toho I2C...
Pavel Kutina
----- Original Message -----
From: "Michal Grunt" <michal.grunt na vynet.cz>
To: "HW-news" <hw-list na list.hw.cz>
Sent: Tuesday, August 27, 2013 11:33 PM
Subject: RE: SPI
Ano mám to přeložené s podporou zápisu. Nicméně našel jsem chybu ve funkci
send_cmd takže už mi to funguje! Paráda. Už jsem v to ani nedoufal... Děkuji
za nakopnutí.
________________________________________
Odesílate: hw-list-bounces na list.hw.cz [hw-list-bounces na list.hw.cz] za
uživatele Ondrej [leguanolog na seznam.cz]
Odesláno: 27. srpna 2013 19:34
To: HW-news
Předmět: Re: SPI
A mate fatfs přeložené s podporou zápisu? A co implementace write fce na
samotnou kartu?
Dne 27.8.2013 17:14, Michal Grunt napsal(a):
> Trošku jsem pokročil. Inicializace SPI už je v pořádku a přístup na FAT
> skoro taky. Vypíšu seznam souborů, jejich obsah, vytvořím soubor, ale už
> do něj nemohu zapsat. Zápis skončí na ve funkci f_write na řádku if (clst
> == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR); (předposlední řádek - níže).
> Nesetkal se s tím někdo? Mám tu dvě SD karty. Jedna 256MB nejde vůbec
> zinicializovat (ale v počítači funguje), druhá je 2GB. Ta už je na tom
> lépe, ale nejde na ni zapisovat (mimo vytvoření prázdného souboru).
>
> Díky, MG
>
> http://d264.googlecode.com/svn/trunk/ext/fatfs/ff.c
>
> FRESULT f_write (
> FIL *fp, /* Pointer to the file object */
> const void *buff, /* Pointer to the data to be written */
> UINT btw, /* Number of bytes to write */
> UINT *bw /* Pointer to number of bytes
> written */
> )
> {
> FRESULT res;
> DWORD clst, sect;
> UINT wcnt, cc;
> const BYTE *wbuff = buff;
> BYTE csect;
>
> *bw = 0; /* Initialize byte counter */
>
> res = validate(fp); /*
> Check validity */
> if (res != FR_OK) LEAVE_FF(fp->fs, res);
> if (fp->flag & FA__ERROR) /* Aborted
> file? */
> LEAVE_FF(fp->fs, FR_INT_ERR);
> if (!(fp->flag & FA_WRITE)) /* Check
> access mode */
> LEAVE_FF(fp->fs, FR_DENIED);
> if ((DWORD)(fp->fsize + btw) < fp->fsize) btw = 0; /* File size
> cannot reach 4GB */
>
> for ( ; btw; /*
> Repeat until all data written */
> wbuff += wcnt, fp->fptr += wcnt, *bw += wcnt, btw -= wcnt) {
> if ((fp->fptr % SS(fp->fs)) == 0) { /* On the sector
> boundary? */
> csect = (BYTE)(fp->fptr / SS(fp->fs) &
> (fp->fs->csize - 1)); /* Sector offset in the cluster */
> if (!csect) { /*
> On the cluster boundary? */
> if (fp->fptr == 0) { /* On the
> top of the file? */
> clst = fp->sclust; /*
> Follow from the origin */
> if (clst == 0) /*
> When no cluster is allocated, */
> fp->sclust = clst =
> create_chain(fp->fs, 0); /* Create a new cluster chain */
> } else
> { /* Middle or end of the file */
> #if _USE_FASTSEEK
> if (fp->cltbl)
> clst = clmt_clust(fp,
> fp->fptr); /* Get cluster# from the CLMT */
> else
> #endif
> clst = create_chain(fp->fs,
> fp->clust); /* Follow or stretch cluster chain on the FAT */
> }
> if (clst == 0) break; /* Could not
> allocate a new cluster (disk full) */
> if (clst == 1) ABORT(fp->fs, FR_INT_ERR);
> if (clst == 0xFFFFFFFF) ABORT(fp->fs,
> FR_DISK_ERR);
> fp->clust = clst; /*
> Update current cluster */
> }
>
> -----Original Message-----
> From: hw-list-bounces na list.hw.cz [mailto:hw-list-bounces na list.hw.cz] On
> Behalf Of Michal Grunt
> Sent: Saturday, August 24, 2013 1:13 PM
> To: HW-news
> Subject: RE: SPI
>
> Tak po odpojení modulu jde MISO do H (když jsem měl modul zapojený zkoušel
> jsem MISO i ručně donutit he stavu H, ale nešlo nic, pořád zůstával ve
> stavu L). Zkusím překontrolovat HW modulu.
>
> ________________________________________
> Odesílate: hw-list-bounces na list.hw.cz [hw-list-bounces na list.hw.cz] za
> uživatele Pavel Kutina [hw na prelude.cz]
> Odesláno: 24. srpna 2013 01:38
> To: HW-news
> Předmět: Re: SPI
>
> A bez karty nebo bez celeho modulu je take stale v nule (jen pro vylouceni
> HW problemu)? O STM nevim nic, ale zrovna vcera mne podobne vyskolil
> Stellaris od TI na daleko trivialnejsi zalezitosti - ja se snazil cist dve
> tlacitka, jedno chodilo, druhe ne, navic to, ktere chodilo, melo navic
> nejakou sdilenou funkci pinu, takze tam bylo o dost vic prostoru pro
> chybu, to druhe bylo ciste.
>
> Inicializoval jsem je stejne, jen to na tom cistem GPIO nejelo. Nakonec
> jsem zjistil, ze jsem je inicializoval blbe oba dva GPIO, jen to na tom
> sdilenem pinu melo pull-up hardwarovy jeste "pres neco" externe na desce,
> takze i kdyz jsem zkonil inicializaci GPIO, stejne tam byl a tlacitko do
> nuly vesele spinalo... To potesilo - asi dve hodiny procitani dokumentace,
> nastavovani registru - a nenapadlo me podivat se do schematu i na ten
> funkci pin...
>
> Takze pokud je to SW spravne (asi ano, tenhle kod vypada podezrele
> podobne:
> https://my.st.com/public/STe2ecommunities/mcu/Lists/STM32Discovery/Attachments/4993/main.c)
> tak bych se zkusil podivat po zeleze...
>
> Pavel Kutina
>
>
> ----- Original Message -----
> From: "Michal Grunt" <michal.grunt na vynet.cz>
> To: <hw-list na list.hw.cz>
> Sent: Saturday, August 24, 2013 1:02 AM
> Subject: SPI
>
>
> Zdravím, už pár hodin bojuju s SPI na STM32 (F0) a nějak nemůžu přijít na
> to kde je problém. Na logickem analyzátoru vidím průběhy MOSI, SCK a CS,
> ale MISO si ani neškrtne, je pořád v L (jedná se o připojení SD karty s
> tímto modulem http://www.ebay.com/itm/251289364968 ). SD karty jsem
> zkoušel dvě (2GB a 256MB). Mám vůbec dobře nakonfigurované GPIO?
>
> RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
> RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
>
> // MISO -> PA6
> GPIO_StructInit (&GPIO_InitStructure);
> GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode =
> GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
> GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
> GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOA,
> &GPIO_InitStructure);
>
> GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_0); // MISO
>
> Pro jistotu ještě uvedu konfiguraci SPI
>
> SPI_Cmd(SPI1, DISABLE);
> SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
> SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
> SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
> SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA =
> SPI_CPHA_1Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
> SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128; //
> 42000kHz/128=328kHz < 400kHz SPI_InitStructure.SPI_FirstBit =
> SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(SPI1,
> &SPI_InitStructure); SPI_RxFIFOThresholdConfig(SPI1,
> SPI_RxFIFOThreshold_QF); SPI_CalculateCRC(SPI1, DISABLE); SPI_Cmd(SPI1,
> ENABLE);
>
> Děkuji za odpověď, MG
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
_______________________________________________
HW-list mailing list - sponsored by www.HW.cz
Hw-list na list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list
_______________________________________________
HW-list mailing list - sponsored by www.HW.cz
Hw-list na list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list
Další informace o konferenci Hw-list