查看: 9098|回复: 16

[原创] 【FRDM-K64F开发笔记】KSDK+DSPI驱动GD25Q32

[复制链接]

该用户从未签到

7

主题

107

帖子

0

中级会员

Rank: 3Rank: 3

积分
444
最后登录
2019-3-7
发表于 2015-11-4 10:07:19 | 显示全部楼层 |阅读模式
本帖最后由 晓枫VS枯叶 于 2015-11-4 10:15 编辑

        飞思卡尔官方发布的KSDK也有好长一段时间了,但是实际的例程却相当的少,今天来发一个K64的DSPI驱动FLASH的例程。首先是建一个KSDK的工程,官方发布的KSDK_Project_Generator.exe这个软件虽然UI做的很粗糙,但是用起来还是蛮简单的。由于使用的是IAR所以直接勾选了生成IAR工程,具体配置如下图所示: 1.jpg
点击advanced就会生成工程,生成的工程文件夹如下图所示:
3.jpg
由于要添加自己的驱动函数所以我把上面的文件夹改成如下图所示的结构,几个单独的文件被我直接扔到了Application文件夹里,drivers文件夹主要放自己的一些设备的驱动程序:
2.jpg
我修改完后,打开IAR同时添加了一个Drivers的Group,同时把上面三个文件重新添加一遍,以防编译时出现错误,同时还要添加必要的头文件目录,这个根据需求添加,由于移动了main.h所以Application也要添加到头文件目录里 。接下来就是DSPI的配置了,喜欢用PE的也可以使用PE生产后复制过来。
  1. uint32_t dspiSourceClock;
  2.   uint32_t calculatedBaudRate;
  3.   dspi_device_t masterDevice;
  4.     dspi_status_t dspiResult;
  5.   dspi_master_state_t masterState;
  6.   dspi_master_user_config_t masterUserConfig = {
  7.     .isChipSelectContinuous     = true,
  8.     .isSckContinuous            = false,
  9.     .pcsPolarity                = kDspiPcs_ActiveLow,
  10.     .whichCtar                  = kDspiCtar0,
  11.     .whichPcs                   = kDspiPcs1
  12.   };
  13. configure_spi_pins(SPI1_IDX);
  14. // Setup the configuration.
  15.   masterDevice.dataBusConfig.bitsPerFrame = 8;
  16.   masterDevice.dataBusConfig.clkPhase     = kDspiClockPhase_FirstEdge;
  17.   masterDevice.dataBusConfig.clkPolarity  = kDspiClockPolarity_ActiveHigh;
  18.   masterDevice.dataBusConfig.direction    = kDspiMsbFirst;
  19.   
  20.   // Initialize master driver.
  21.   dspiResult = DSPI_DRV_MasterInit(1,
  22.                                    &masterState,
  23.                                    &masterUserConfig);
  24.   if (dspiResult != kStatus_DSPI_Success)
  25.   {
  26.    
  27.   }
  28.   
  29.   // Configure baudrate.
  30.   masterDevice.bitsPerSec = TRANSFER_BAUDRATE;
  31.   dspiResult = DSPI_DRV_MasterConfigureBus(1,
  32.                                            &masterDevice,
  33.                                            &calculatedBaudRate);
  34.   if (dspiResult != kStatus_DSPI_Success)
  35.   {
  36.    
  37.   }
复制代码

TRANSFER_BAUDRATE这个宏是你要配置的DSPI的传输速度,calculatedBaudRate是实际配置好的DSPI的传输速度(毕竟不能你想要多少就给多少的了),貌似设置的最高是30MHz,然后DSPI初始化完了,开始写DSPI的发送接收函数。
  1. dspi_command_config_t commandConfig =
  2. {
  3.   .isChipSelectContinuous = false,
  4.   .whichCtar              = kDspiCtar0,
  5.   .whichPcs               = kDspiPcs1,
  6.   .clearTransferCount     = true,
  7.   .isEndOfQueue           = false
  8. };
  9. uint8_t SPI1_ReadWriteByte(uint8_t sendBuffer)
  10. {
  11.   
  12.   DSPI_HAL_WriteDataMastermode(SPI1,&commandConfig,sendBuffer);
  13.   if(!DSPI_HAL_GetIntMode(SPI1,kDspiTxComplete))
  14.   {
  15.     while(!DSPI_HAL_GetStatusFlag(SPI1,kDspiTxComplete));
  16.     DSPI_HAL_ClearStatusFlag(SPI1,kDspiTxComplete);
  17.   }
  18.   
  19.   return (uint8_t)DSPI_HAL_ReadData(SPI1);
  20. }
复制代码

之前使用DRIVER层驱动,会出现各种各样的问题,有时候还会导致程序卡死、跑飞,最后使用HAL层的驱动才搞定,可能是DSPI的FIFO和DMA以及中断的问题。
底层驱动函数都搞好了,然后是FLASH的各种指令及状态寄存器的读写,可以直接使用已经写好的,不必再去浪费时间重新写。
最后测试一下,读FLASH的ID,读出来是0XC815,这里就不啰嗦了,和GD25Q32的ID一致,我这里有一个FLASH烧录器可以烧些数据进去,用FRDM-K64读出来,看是不是正确的,简单测试了下没有什么问题,这个KSDK虽然结构很复杂,但是操作起来还是比较简单,希望飞思卡尔的KSDK更完善,然后可以开放那个工程生成工具的源码,优化UI。



回复

使用道具 举报

该用户从未签到

5

主题

159

帖子

0

中级会员

Rank: 3Rank: 3

积分
364
最后登录
2016-7-26
发表于 2015-11-4 13:19:55 | 显示全部楼层
回复

使用道具 举报

该用户从未签到

34

主题

135

帖子

0

中级会员

Rank: 3Rank: 3

积分
387
最后登录
2016-1-13
发表于 2015-11-4 13:36:50 | 显示全部楼层
@二货520,回复不要一直表情刷屏哦

回复要有点实质性内容
回复 支持 反对

使用道具 举报

该用户从未签到

4

主题

78

帖子

0

中级会员

Rank: 3Rank: 3

积分
209
最后登录
2015-12-11
发表于 2015-11-4 14:50:30 | 显示全部楼层
不错的代码啊
回复 支持 反对

使用道具 举报

该用户从未签到

9

主题

642

帖子

0

高级会员

Rank: 4

积分
748
最后登录
1970-1-1
发表于 2015-11-4 16:04:43 | 显示全部楼层
好的经验。
回复

使用道具 举报

  • TA的每日心情
    擦汗
    2016-12-4 23:20
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    9

    主题

    573

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1785
    最后登录
    2017-3-3
    发表于 2015-11-26 21:17:58 | 显示全部楼层
    091541cr1iu0jkaf0zjmqc.png 谢谢分享
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    18

    主题

    371

    帖子

    0

    禁止发言

    积分
    817
    最后登录
    2022-10-27
    发表于 2015-11-26 23:02:37 | 显示全部楼层
    提示: 作者被禁止或删除 内容自动屏蔽
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9

    主题

    642

    帖子

    0

    高级会员

    Rank: 4

    积分
    748
    最后登录
    1970-1-1
    发表于 2015-11-27 08:46:38 | 显示全部楼层
    还有后续开发吗?
    104930kli5jsmlssemljli.png
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-1-6 07:38
  • 签到天数: 736 天

    连续签到: 1 天

    [LV.9]以坛为家II

    21

    主题

    3486

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    5093
    最后登录
    2024-1-7
    发表于 2015-11-27 11:30:13 | 显示全部楼层
    谢谢分享
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    该用户从未签到

    7

    主题

    64

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    314
    最后登录
    2016-11-18
    发表于 2015-12-22 10:36:39 | 显示全部楼层
    正在做这一块,期待你的主函数部分,谢谢
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-8-21 04:42 , Processed in 0.113733 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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