[通用型号] 合泰USB模拟U盘

[复制链接]
 楼主| zzzxiao 发表于 2023-8-26 22:04 | 显示全部楼层 |阅读模式
请问谁有合泰的32位的芯片使用USB读取SPI FLASH模拟成U盘在电脑端读取和写入文件吗?我现在按照例程中读写SD的方案写了一个读写flash的,但是只能在电脑端读文件,不能写入文件。现在是USB读写flash的函数,其中读函数是一次两个字节,所以读取长度需要少一半,即右移了一位
  1. u32 FLASHDISK_Write(u32 uId, u8 *pBuffer, u32 uBlockAddress, u32 uLength)
  2. {
  3.   u32 i;
  4.   u32 uResult = TRUE;

  5.   if (uId == FLASHDISK0_ID)
  6.   {
  7.     uResult = TRUE;
  8.     if (gDiskWriteStatus == FLASHDISK_IDLE)
  9.     {
  10.       gDiskWriteStatus = FLASHDISK_WRITE;
  11.       guWriteBufferOffset = 0;
  12.     }
  13.     for (i = 0; i < uLength; i++)
  14.     {
  15.       guWriteBuffer[guWriteBufferOffset + i] = *(pBuffer + i);
  16.     }
  17.     guWriteBufferOffset += uLength;
  18.     if (guWriteBufferOffset == FLASHDISK0_BlockSize)
  19.     {
  20.       gDiskWriteStatus = FLASHDISK_IDLE;
  21.                         uBlockAddress = uBlockAddress<<12;   
  22.       SPI_FLASH_SectorErase(uBlockAddress);
  23.       FATFS_SPI_FLASH_BufferWrite((u8 *)guWriteBuffer,uBlockAddress,FLASHDISK0_BlockSize);
  24.     }
  25.   }
  26.   else
  27.   {
  28.     uResult = FALSE;
  29.   }

  30.   return uResult;
  31. }

  1. u32 FLASHDISK_Read(u32 uId, u8 **pBuffer, u32 uBlockAddress, u32 uLength)
  2. {
  3.   u32 uResult = TRUE;

  4.   if (uId == FLASHDISK0_ID)
  5.   {
  6.     if ((uBlockAddress / CACHE_CNT != uCachePage / CACHE_CNT) && (uCachePage != uBlockAddress))
  7.     {
  8.       /* Calculate the cache start address which shall be aligned with the cache size.                      */
  9.       uCachePage = (uBlockAddress / CACHE_CNT) * CACHE_CNT;
  10.                         QSPI_FLASH_BufferQuadReadByDMA((u16*)guReadBuffer, uCachePage, (FLASHISK_READ_BUFFER)>>1);
  11.     }
  12.     if ((uCurrentBlock != uBlockAddress) || ((guReadBufferOffset % FLASHDISK0_BlockSize) == 0))
  13.     {
  14.       uCurrentBlock = uBlockAddress;
  15.       guReadBufferOffset = (uBlockAddress - uCachePage) * FLASHDISK0_BlockSize;
  16.     }
  17.     *pBuffer = &(guReadBuffer[guReadBufferOffset]);
  18.     guReadBufferOffset += BOT_MAX_PACKET_SIZE;
  19.   }
  20.   else
  21.   {
  22.     uResult = FALSE;
  23.   }
  24.   return uResult;
  25. }

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

本版积分规则

7

主题

20

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

7

主题

20

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部