SPI

Michal Grunt michal.grunt na vynet.cz
Úterý Srpen 27 17:14:22 CEST 2013


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


Další informace o konferenci Hw-list