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