SSブログ

Martin ThomasさんのSTM32F用FatFsの修正点 [ARM&Cortex-M3]

※10月14日の版でこの件は修正が行われた様です。

え!、勿論面識無いです(笑)。
fatfs_005.png例のSTM32F用のFatFsを提供してくれているMartin Thomasさんの2009年9月10日版のプロジェクトファイルですが、細かい話ですがLibraries\fat_sdのsd_spi_stm32.cに若干の修正が必要な様です。


175行目のこれを、
static void socket_wp_cp_init(void)
{
	/* Turn on GPIO for socket-switches */
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO_WP_CP, ENABLE);
	/* Configure I/O for Power FET */
	GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_WP | GPIO_Pin_CP;
	GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IN_FLOATING;
	GPIO_Init(GPIO_WP_CP, &GPIO_InitStructure);
}

この様に、
static void socket_wp_cp_init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

  /* Turn on GPIO for socket-switches */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO_WP_CP, ENABLE);
  /* Configure I/O for Power FET */
  GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_WP | GPIO_Pin_CP;
  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_WP_CP;
  GPIO_Init(GPIO_WP_CP, &GPIO_InitStructure);
}


また185行目を
static inline socket_state_t socket_wp_cp_state(void)
{
	return (socket_state_t)(GPIO_ReadInputDate(GPIO_WP_CP) 
	                        & ( GPIO_Pin_WP | GPIO_Pin_CP));
}


この様にします。
static inline socket_state_t socket_wp_cp_state(void)
{
  return (socket_state_t)(GPIO_ReadInputData(GPIO_WP_CP) 
                         & ( GPIO_Pin_WP | GPIO_Pin_CP));
}

共にWrite Protect、Card Detectを有効にしてビルドを行うと、コンパイラ、またはリンカーに怒られて間違いが発覚します。
最初の奴はGPIO_InitTypeDef構造体が用意されていなくてエラーですね。
2番目の奴はもろにタイプミスでしょう。

2008年6月号のDWMの付録基板をお持ちの方なら実際にFatFsをお試しいただけると思います。
一部PINの割付等がMartin Thomasさんの場合と異なるので、コンフィギュレーションの一部を自分の基板向けに修正する必要があります。
私はDWMの付録基板を持っていないのでAIRESの例で行けば、
 #define CARD_SUPPLY_SWITCHABLE   0
 #define SOCKET_WP_CP_CONNECTED   1 /* */
 #define GPIO_WP_CP               GPIOB
 #define RCC_APB2Periph_GPIO_WP_CP  RCC_APB2Periph_GPIOB
 #define GPIO_Pin_WP              GPIO_Pin_11
 #define GPIO_Pin_CP              GPIO_Pin_10
 #define GPIO_Mode_WP_CP          GPIO_Mode_IPU /* pull up resistors */
 #define SPI_SD                   SPI2
 #define GPIO_CS                  GPIOB
 #define RCC_APB2Periph_GPIO_CS   RCC_APB2Periph_GPIOB
 #define GPIO_Pin_CS              GPIO_Pin_12
 #define DMA_Channel_SPI_SD_RX    DMA1_Channel4
 #define DMA_Channel_SPI_SD_TX    DMA1_Channel5
 #define DMA_FLAG_SPI_SD_TC_RX    DMA1_FLAG_TC4
 #define DMA_FLAG_SPI_SD_TC_TX    DMA1_FLAG_TC5
 #define GPIO_SPI_SD              GPIOB
 #define GPIO_Pin_SPI_SD_SCK      GPIO_Pin_13
 #define GPIO_Pin_SPI_SD_MISO     GPIO_Pin_14
 #define GPIO_Pin_SPI_SD_MOSI     GPIO_Pin_15
 #define RCC_APBPeriphClockCmd_SPI_SD  RCC_APB1PeriphClockCmd
 #define RCC_APBPeriph_SPI_SD     RCC_APB1Periph_SPI2
 /* for SPI2 and full-speed APB1: 36MHz/2 */
 /* !! PRESCALE 4 used here - 2 does not work, maybe because 
       of the poor wireing on the HELI_V1 prototype hardware */
 #define SPI_BaudRatePrescaler_SPI_SD  SPI_BaudRatePrescaler_2  /*可能だが若干不安定*/
// #define SPI_BaudRatePrescaler_SPI_SD  SPI_BaudRatePrescaler_4  /*実用可能*/
// #define SPI_BaudRatePrescaler_SPI_SD  SPI_BaudRatePrescaler_256

//#error "unsupported board"

を#else句の中に記述してしまいました。

以上!。
nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

FatFsをARIES(STM32F10..STM32F ARIESの開発 ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。