查看: 3746|回复: 0

ADSP-BF531下载程序到FLASH

[复制链接]
  • TA的每日心情

    2021-12-24 16:56
  • 签到天数: 739 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2015-5-8 21:13:27 | 显示全部楼层 |阅读模式
    分享到:
    看着标题是不是认为都很简单?就像单片机一样,直接点击download就可以将程序下载到单片机里面的flash里面固化了?其实不然,DSP尤其变态。
    BF531木有内部FLASH,所有的代码均存储在外部FLASH里面,所以,这个芯片有几种启动方式,受BMODE[1:0]控制,具体如下:
    A. 外部非同步存储器直接启动,启动地址0x20000000,要求管脚BMODE[1:0]为00
    B. 外部非同步存储器启动,使用片上Loader,将外部非同步存储器中的程序加载到L1 Cache,启动地址0xFFA08000(BF533为0xFFA00000),要求管脚BMODE[1:0]为01
    C. SPI Flash Slave模式启动,即可以使用别的CPU向ADSP-BF531/532/533输入程序,启动地址同B,要求管脚BMODE[1:0]为10
    D. SPI Flash Master模式启动,使用片上Loader,将SPI Flash中的程序加载到L1 Cache,启动地址同B,要求管脚BMODE[1:0]为11

    所以,在设计板子的时候,就将这俩引脚拉高了的。而flash存储器也选择了常用的AT45DB161

    信心满满的以为,很简单的一个操作,应该能够很快就搞定。结果,搞了3天,就是不行。

    根据网上的教程,需要先将下载的固件设置为Loader格式。
    然后,在loader的设置里面,还需要一个initialization code 的工程。
    跌跌撞撞的找了个这么样的
    结果,还需要一个下载驱动。!!!

    这特么还是人玩的么,简直是玩人的。

    我的理解就是,这个驱动,相当于一个临时的固件程序,接受IDE的下载命令和数据流,将接收到的数据流写入到flash里面

    找啊找啊找啊找。。。。

    找到了一个貌似是驱动程序的程序,小心的编译,设置,下载,哎,出现内存不足的错误。
    可恶的Analog,你详细告诉我是计算机内存不足,还是ADSP内存不足啊,还让我去猜。
    看看计算机内存,才用了60%,4G的内存,剩余不止1G呢,应该够用。那,就那么一个闪LED的程序,DSP会内存不足?

    算了吧,还是继续找。。。
    为啥不看代码呢,因为我不懂汇编。
    貌似国内的ADSP的比较资料多的论坛就只有那么1-2个。还好,下载文件比较容易,不像某些地方注册还收钱。
    赶紧注册,下载几个来测试。

    某一个,版主说明是肯定支持spi启动的,下载来一试,还是不行,说是文件写入失败。。。
    简直要抓狂了。。。

    耐着性子,看了看其代码,结果发现,里面有些命令的列表:


    /* flash commands */
    #define SPI_WREN            (0x06)  //Set Write Enable Latch
    #define SPI_WRDI            (0x04)  //Reset Write Enable Latch
    #define SPI_RDID            (0x9F)  //Read Identification
    #define SPI_RDSR            (0x05)  //Read Status Register
    #define SPI_WRSR            (0x01)  //Write Status Register
    #define SPI_READ            (0x03)  //Read data from memory
    #define SPI_FAST_READ       (0x0B)  //Read data from memory
    #define SPI_PP              (0x02)  //Program Data into memory
    #define SPI_SE              (0xD8)  //Erase one sector in memory
    #define SPI_BE              (0xC7)  //Erase all memory
    #define WIP                  (0x1)

    然后翻看一下AT45DB161的命令列表看看,是这个样子的

    Table 15-1. Read Commands
    Command                                                   Opcode
    Main Memory Page Read                              D2H
    Continuous Array Read (Legacy Command)    E8H
    Continuous Array Read (Low Frequency)        03H
    Continuous Array Read (High Frequency)       0BH
    Buffer 1 Read (Low Frequency)                     D1H
    Buffer 2 Read (Low Frequency)                     D3H
    Buffer 1 Read                                              D4H
    Buffer 2 Read                                              D6H

    貌似跟代码里面的差别很大啊。是不是这个原因造成的?还有木有其他兼容的flash?
    想想,貌似我还有个W25Q80,看看这个是不是兼容?
    赶紧翻出W25的芯片数据手册,一看,命令是这个样子的:
    (无法上图,请看其数据手册,谢谢)

    简直跟代码就是惊人的相似。
    赶紧,翻出W25Q80,焊下AT45DB161,飞线焊上W25,上电,加载驱动,擦除,下载。

    Success: Erase all.
    Success: Program complete.

    终于OK了,断电,上电,久违的LED闪动程序终于从flash里面加载了。

    忍不住眼泪哗哗滴。。。。。。

    (无法传附件,见谅)
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-3-29 08:14 , Processed in 0.114375 second(s), 15 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.