OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8112|回复: 3

usb使用DMA进行数据通信

[复制链接]

9

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2012-11-20
在线时间
0 小时
发表于 2012-11-22 20:03:49 | 显示全部楼层 |阅读模式

我使用STM32与SPIFLASH做了一个U盘,使用SPI通信都能很正常的工作,但速度不快最多只能达到30KBPS。后来是同DMA-SPI速度是上去了,也能读写,但就是格式化不了,一下两段代码分别是SPI通信与DMA-SPA通信,请教是哪边出了问题。
SPI:
void W25X_Write_Bytes(uint32_t nSector,u8* pBuffer, u16 nBytes)
{
 u16 i;
 uint32_t k1;
 for(i=0;i<nBytes;i++) 
 { 
  W25X_Write_Enable();
  FLASH_CS_0();  
  SPI_Write_Byte(W25X_PageProgram);
  SPI_Write_Byte((u8)(((nSector+i) & 0xFFFFFF) >> 16));  /* 发送3个字节的地址信息 */
  SPI_Write_Byte((u8)(((nSector+i) & 0xFFFF) >> 8));
  SPI_Write_Byte((u8)(nSector+i) & 0xFF);
  k1=nSector+i;

 // for(i=0;i<nBytes;i++)
  SPI_Write_Byte(pBuffer);
  
  FLASH_CS_1();
 
  W25X_Wait_Busy();
 }
}


DMA_SPI:

#define DMA_BUFFER_SIZE           128
static uint8_t _spi_flash_buffer[ DMA_BUFFER_SIZE ];
void W25X_Write_Bytes(uint32_t nSector,u8* pBuffer, u16 nBytes)
{
 u16 i;
 uint32_t k1,k2,k3;
 for(i=0; i<nBytes/DMA_BUFFER_SIZE; i++)
 {
  W25X_Write_Enable();
  FLASH_CS_0();  
  SPI_Write_Byte(W25X_PageProgram);
  k1=nSector+i*DMA_BUFFER_SIZE;
  SPI_Write_Byte((u8)((nSector+i*DMA_BUFFER_SIZE) & 0xFFFFFF >> 16));  /* 发送3个字节的地址信息 */
  k2=nSector+i*DMA_BUFFER_SIZE;
  SPI_Write_Byte((u8)((nSector+i*DMA_BUFFER_SIZE) & 0xFFFF >> 8));
  k3=nSector+i*DMA_BUFFER_SIZE;
  SPI_Write_Byte((u8)((nSector+i*DMA_BUFFER_SIZE) & 0xFF) );

  memcpy(_spi_flash_buffer,pBuffer+i*DMA_BUFFER_SIZE,DMA_BUFFER_SIZE);
  DMA_Txconfig((uint32_t )_spi_flash_buffer, DMA_BUFFER_SIZE);
  DMA_Cmd(DMA1_Channel5, ENABLE); 
  DMA_Cmd(DMA1_Channel4, ENABLE);
        while (!(DMA_GetFlagStatus(DMA1_FLAG_TC5)));
        SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Tx|SPI_I2S_DMAReq_Rx , DISABLE);
 }
 FLASH_CS_1();
 W25X_Wait_Busy();
}
其中DMA_Txconfig((uint32_t )_spi_flash_buffer, DMA_BUFFER_SIZE) 是对DMA进行配置

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2012-11-20
在线时间
0 小时
 楼主| 发表于 2012-11-22 20:04:26 | 显示全部楼层
回复 支持 反对

使用道具 举报

9

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2012-11-20
在线时间
0 小时
 楼主| 发表于 2012-11-22 20:26:54 | 显示全部楼层
原子哥请教啊
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-11-22 21:47:12 | 显示全部楼层
我很怀疑这种方式速度能快?快多少?
读写数据真无问题?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-18 21:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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