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の関数作る必要あり。