組み込み技術を向上したい!!

でも組み込み以外にも手を出し始めました・・・

STM32F429I-DISCOとMicroSD FatFs

STM32F429I-DISCOのボードと秋月のmicroSDの基板を使って、
ファイルの読み書きをするときのメモ。

開発環境はCooCoxのやつね。

世の中にはすばらしいお方がおられるようで、
ChaN(http://elm-chan.org/)さんというお方がFatFsというFatシステムを
提供してくれています。

せっかくなので使わせて頂きます。ありがとうございます。

ボード上にはMicroSDのスロットとかないので、
秋月電子(http://akizukidenshi.com/catalog/g/gK-05488/)とかで買って配線しました。

SDIOのほうが高速でよさそうだけど、
簡単そうなのでSPIでmicroSDにアクセスしてみます。

SPI4だとボード上で使われていないポートのようなので、
SPI4を使ってみます。
以下のように割り当てます。

PE2 = SPI4_SCK
PE3 = CS
PE5 = SPI4_MISO
PE6 = SPI4MOSI

以下がSPIの初期化コード

/*! **************************************************************
 * @brief	data 8 bit mode
 ****************************************************************/
void	SPI_8BitMode(void)
{
	SPI_InitTypeDef  SPI_InitStructure;

	/* SPI1	configuration */
	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_CPOL				= SPI_CPOL_High;
	SPI_InitStructure.SPI_CPHA				= SPI_CPHA_1Edge;
	SPI_InitStructure.SPI_NSS				= SPI_NSS_Soft | SPI_NSSInternalSoft_Set;
	SPI_InitStructure.SPI_BaudRatePrescaler	= SPI_BaudRatePrescaler_32;
	SPI_InitStructure.SPI_FirstBit			= SPI_FirstBit_MSB;
	SPI_Init(SPI4, &SPI_InitStructure);
	SPI_Cmd(SPI4, ENABLE);
}
/*! **************************************************************
 * @brief	send data
 ****************************************************************/
void InitSPI_forMMC(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	SPI_InitTypeDef  SPI_InitStructure;

	/* Clock Enable */
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI4, ENABLE);

	/* Configure SPI1 pins: SCK, MISO, MOSI */
	GPIO_InitStructure.GPIO_Pin                = SPI4_SCK_Pin | SPI4_MISO_Pin | SPI4_MOSI_Pin;
	GPIO_InitStructure.GPIO_Mode        = GPIO_Mode_AF;
	GPIO_InitStructure.GPIO_Speed        = GPIO_Speed_100MHz;

	GPIO_InitStructure.GPIO_OType        = GPIO_OType_PP;
//	GPIO_InitStructure.GPIO_PuPd        = GPIO_PuPd_NOPULL;
	GPIO_InitStructure.GPIO_PuPd        = GPIO_PuPd_UP;

	GPIO_Init(GPIOE, &GPIO_InitStructure);
	GPIO_PinAFConfig(GPIOE, GPIO_PinSource2, GPIO_AF_SPI4);
	GPIO_PinAFConfig(GPIOE, GPIO_PinSource5, GPIO_AF_SPI4);
	GPIO_PinAFConfig(GPIOE, GPIO_PinSource6, GPIO_AF_SPI4);

	GPIO_InitStructure.GPIO_Pin                	= SPI4_CS_Pin;
	GPIO_InitStructure.GPIO_Mode        		= GPIO_Mode_OUT;
	GPIO_Init(GPIOE, &GPIO_InitStructure);

	SPI_8BitMode();
}

Pull upしてなかったら立ち上がりが安定しなかったので、追加しました。
タイムスタンプがいるので、ダミーでRTCの関数作る必要あり。