野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13385|回复: 7

外部flash模拟U盘

[复制链接]
发表于 2017-5-17 13:42:27 | 显示全部楼层 |阅读模式
本帖最后由 龙王三太子 于 2017-5-17 13:46 编辑

原子哥,请教一下,我用野火F103例程《外部flash模拟U盘》,该例程是用的W25Q64来实现的,但是我想用W25Q128在这个基础上去改,发现试出来的U盘空间大小是0,我知道很可能是容量的问题,也参考了F407的例程,发现不太兼容,搞不定,问一下原子哥,改容量的地方是不是只有如下图的地方:


除了SPI_FLASH_PageSize 256 外还有其他的地方要改吗?我希望是在F103例程《外部flash模拟U盘》的例程上该,这样方便些,请教了。
1.png
QQ图片20170517134524.jpg
回复

使用道具 举报

发表于 2017-5-17 15:42:50 | 显示全部楼层
参考一下407的例程,407的例程是Q128的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-17 16:41:19 | 显示全部楼层
flyleaf 发表于 2017-5-17 15:42
参考一下407的例程,407的例程是Q128的

参考了,直接就报错 Hard_false终端了,不知道为啥   
回复 支持 反对

使用道具 举报

发表于 2017-5-17 17:19:14 | 显示全部楼层
龙王三太子 发表于 2017-5-17 16:41
参考了,直接就报错 Hard_false终端了,不知道为啥

跟底层芯片读写、容量相关的是在mass_mal.c文件改了没?
特别是这个函数,这个文件的内容都参考407的同名文件来改:
  1. /*******************************************************************************
  2. * Function Name  : MAL_GetStatus
  3. * Description    : Get status
  4. * Input          : None
  5. * Output         : None
  6. * Return         : None
  7. *******************************************************************************/
  8. uint16_t MAL_GetStatus (uint8_t lun)
  9. {
  10.   if (lun == 0)
  11.   {
  12.     FLASH_SPI_disk_initialize();
  13.                 if(SPI_FLASH_ReadID()==sFLASH_ID)
  14.     {
  15.                         Mass_Block_Size[0]  =4096;
  16.                         Mass_Block_Count[0] =1536;
  17.                         Mass_Memory_Size[0] =Mass_Block_Size[0]*Mass_Block_Count[0];
  18.       return MAL_OK;
  19.     }
  20.   }
  21.   return MAL_FAIL;
  22. }
复制代码


回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-17 17:38:10 | 显示全部楼层
本帖最后由 龙王三太子 于 2017-5-18 08:33 编辑
flyleaf 发表于 2017-5-17 17:19
跟底层芯片读写、容量相关的是在mass_mal.c文件改了没?
特别是这个函数,这个文件的内容都参考407的同 ...

改了 但还是不行。



回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-18 08:32:24 | 显示全部楼层
flyleaf 发表于 2017-5-17 17:19
跟底层芯片读写、容量相关的是在mass_mal.c文件改了没?
特别是这个函数,这个文件的内容都参考407的同 ...

原子哥,我按407的改完之后就出现HardFault_Handler了,不知道啥原因,我把我改完之后的贴出来您帮我看看,或者您帮我用w25q64例程上改成w25128,发我邮箱吧,然后我会贴出来和大家分享,造福广大群众,改完之后发我qq邮箱: 1491895682@qq.com


改后出错,代码贴出如下:

/**
  ******************************************************************************
  * @file    mass_mal.c
  * @author  MCD Application Team
  * @version V3.4.0
  * @date    29-June-2012
  * @brief   Medium Access Layer interface
  ******************************************************************************
  * @attention
  *
  * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
  *
  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
  * You may not use this file except in compliance with the License.
  * You may obtain a copy of the License at:
  *
  *        http://www.st.com/software_license_agreement_liberty_v2
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  *
  ******************************************************************************
  */


/* Includes ------------------------------------------------------------------*/


#include "..\User\spi_flash\fatfs_flash_spi.h"
#include "mass_mal.h"
#include <stdio.h>
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
uint32_t Mass_Memory_Size[2];
uint32_t Mass_Block_Size[2];
uint32_t Mass_Block_Count[2];
__IO uint32_t Status = 0;
//#define  sFLASH_ID              0xEF3015     //W25X16
//#define  sFLASH_ID              0xEF4015         //W25Q16
//#define  sFLASH_ID              0XEF4017    //W25Q64
#define  sFLASH_ID              0XEF4018    //W25Q128

/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
/*******************************************************************************
* Function Name  : MAL_Init
* Description    : Initializes the Media on the STM32
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
uint16_t MAL_Init(uint8_t lun)
{
  uint16_t status = MAL_OK;

  switch (lun)
  {
    case 0:
                        FLASH_SPI_disk_initialize();
                        if(SPI_FLASH_ReadID()==sFLASH_ID)
                        {
                                //printf("flash init succsee\n");
                                Status = MAL_OK;
                        }
                        else
                                Status = MAL_FAIL;
      break;
    default:
      return MAL_FAIL;
  }
  return status;
}
/*******************************************************************************
* Function Name  : MAL_Write
* Description    : Write sectors
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
uint16_t MAL_Write(uint8_t lun, uint32_t Memory_Offset, uint32_t *Writebuff, uint16_t Transfer_Length)
{
  switch (lun)
  {
    case 0:
                        //Memory_Offset+=(512*4096);//éè&#199;&#248;&#198;&#171;ò&#198;£&#172;ía2&#191;Flash&#206;&#196;&#188;t&#207;μí3&#191;&#213;&#188;&#228;·&#197;&#212;úía2&#191;Flashoó&#195;&#230;6M&#191;&#213;&#188;&#228;
                 Memory_Offset+=1536;
                        //printf("write add =%d.length=%d\n",Memory_Offset/4096,Transfer_Length/4096);
                        SPI_FLASH_SectorErase(Memory_Offset<<12);
                        SPI_FLASH_BufferWrite((uint8_t *)Writebuff,Memory_Offset<<12,Transfer_Length<<12);
      break;
    default:
      return MAL_FAIL;
  }
  return MAL_OK;
}

/*******************************************************************************
* Function Name  : MAL_Read
* Description    : Read sectors
* Input          : None
* Output         : None
* Return         : Buffer pointer
*******************************************************************************/
uint16_t MAL_Read(uint8_t lun, uint32_t Memory_Offset, uint32_t *Readbuff, uint16_t Transfer_Length)
{

  switch (lun)
  {
    case 0:
                        //Memory_Offset+=(512*4096);//éè&#199;&#248;&#198;&#171;ò&#198;£&#172;ía2&#191;Flash&#206;&#196;&#188;t&#207;μí3&#191;&#213;&#188;&#228;·&#197;&#212;úía2&#191;Flashoó&#195;&#230;6M&#191;&#213;&#188;&#228;
                  Memory_Offset+=1536;
                        //printf("read add =%d.length=%d\n",Memory_Offset/4096,Transfer_Length/4096);
                        SPI_FLASH_BufferRead((uint8_t *)Readbuff, Memory_Offset<<12, Transfer_Length<<12);
      break;
    default:
      return MAL_FAIL;
  }
  return MAL_OK;
}

/*******************************************************************************
* Function Name  : MAL_GetStatus
* Description    : Get status
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
uint16_t MAL_GetStatus (uint8_t lun)
{
  if (lun == 0)
  {
    FLASH_SPI_disk_initialize();
                if(SPI_FLASH_ReadID()==sFLASH_ID)
    {
                        Mass_Block_Size[0]  =4096;
                        Mass_Block_Count[0] =2560;
                        Mass_Memory_Size[0] =Mass_Block_Size[0]*Mass_Block_Count[0];
      return MAL_OK;
    }
  }
  return MAL_FAIL;
}

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/



回复 支持 反对

使用道具 举报

发表于 2017-6-14 16:42:38 | 显示全部楼层
哈哈. 你让火哥情何以堪, 这是野火论坛.你问原子哥. 哥也是醉里,实在忍不住吐槽下.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-16 10:15:20 | 显示全部楼层
cbx_xx 发表于 2017-6-14 16:42
哈哈. 你让火哥情何以堪, 这是野火论坛.你问原子哥. 哥也是醉里,实在忍不住吐槽下.

直接copy过来,没有改,哈哈
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 07:41 , Processed in 0.044784 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表