新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 將FATFS移植STM32RBT6遇到的掛載不成功和返回值問(wèn)題

將FATFS移植STM32RBT6遇到的掛載不成功和返回值問(wèn)題

作者: 時(shí)間:2016-11-27 來(lái)源:網(wǎng)絡(luò) 收藏
移植fatfs遇到了諸多問(wèn)題,很是苦惱啊,移植成功思來(lái)之不易,特分享一下經(jīng)驗(yàn)。硬件是STM32F103RBT6內(nèi)存只有20kB,Flash只有128KB,考慮到內(nèi)存有限,就不能支持長(zhǎng)文件名了,在原子論壇上下載的所以要改動(dòng),在此感謝原子論壇給我?guī)?lái)的幫助還有安富萊論壇http://bbs.armfly.com/read.php?tid=3601給我?guī)?lái)的啟示。另外硬件還有一個(gè)大的相機(jī)的SD卡,網(wǎng)上買的模塊當(dāng)然也可以自己焊接一個(gè),采用SPI接口,SPI1和SPI2都行,看圖

本文引用地址:http://butianyuan.cn/article/201611/322305.htm

移植前做了大量準(zhǔn)備,在網(wǎng)上尤其是原子論壇翻看各種其他人移植的心得,去fatfs的官方網(wǎng)站下載0.10版本的程序,看各種相關(guān)的移植心得,文檔版本眾多,眼花繚亂,花了點(diǎn)時(shí)間看了看一些函數(shù)??吹貌畈欢嗔?,就直接把0.10的版本考到自己的工程目錄下開(kāi)始make,經(jīng)過(guò)大量的翻閱和實(shí)踐,要?jiǎng)拥牡胤街挥衐iskio.c和ffconfig.h,第一個(gè)需要把底層驅(qū)動(dòng)函數(shù)sd_inti();添加進(jìn)去。sd卡的讀單塊和讀多塊,寫單塊寫多塊填進(jìn)去,ffconfig.h里邊需要改幾個(gè)宏定義的值參照別人的例程就可以實(shí)現(xiàn)很簡(jiǎn)單。

DSTATUS disk_initialize (
BYTE drv/* Physical drive nmuber (0..) */
)
{


u8 state;
state=SD_Init();
if(!state){
return STA_NODISK;
}
return 0;
}

/*-----------------------------------------------------------------------*/
/* Return Disk Status */

DSTATUS disk_status (
BYTE drv/* Physical drive nmuber (0..) */
)
{return 0;
}

/*-----------------------------------------------------------------------*/
/* Read Sector(s) */

DRESULT disk_read (
BYTE drv,/* Physical drive nmuber (0..) */
BYTE *buff,/* Data buffer to store read data */
DWORD sector,/* Sector address (LBA) */
BYTE count/* Number of sectors to read (1..255) */
)
{
u8 res=0;


if(count==1) //1個(gè)sector的讀操作
{
res = SD_ReadSingleBlock(sector, buff);
//res= SD_ReadDisk(buff,sector,count);
}
else //多個(gè)sector的讀操作
{
res = SD_ReadMultiBlock(sector, buff, count);
}

//處理返回值,將SPI_SD_driver.c的返回值轉(zhuǎn)成ff.c的返回值
if(res == 0x00)
{
return RES_OK;
}
else
{
return RES_ERROR;
}
}

/*-----------------------------------------------------------------------*/
/* Write Sector(s) */

#if _READONLY == 0
DRESULT disk_write (
BYTE drv,/* Physical drive nmuber (0..) */
const BYTE *buff,/* Data to be written */
DWORD sector,/* Sector address (LBA) */
BYTE count/* Number of sectors to write (1..255) */
)
{
u8 res;

// 讀寫操作
if(count == 1)
{
res = SD_WriteSingleBlock(sector, buff);;
}
else
{
res = SD_WriteMultiBlock(sector, buff, count);
}
// 返回值轉(zhuǎn)換
if(res == 0)
{
return RES_OK;
}
else
{
return RES_ERROR;
}
}
#endif /* _READONLY */


上一頁(yè) 1 2 下一頁(yè)

評(píng)論


技術(shù)專區(qū)

關(guān)閉