norains的专栏

只专注于WINCE开发

用户操作
[即时聊天] [发私信] [加为好友]
norainsID:norains
142908次访问,排名598,好友0人,关注者53人。
代码其实是一种乐趣
norains的文章
原创 189 篇
翻译 0 篇
转载 10 篇
评论 274 篇
norains的公告
联系方式请看置顶文章
最近评论
dfdf:讨厌MFC!我觉得MFC就是太乱了!看似无用的代码不要不行,MD微软啥都给我们做完了,原理性的东西我们却永远没法搞懂了!
ironox:有个地方 我觉得很别扭,不知道怎么办好

比如说 CReg reg(HKEY_CURRENT_USER,TEXT("ControlPanel\Volume"));
ControlPanel\Volume 有可能不存在呀,这个该怎么处理哦?对象虽然创建了,出错了也没提示
szterry:呵呵,果然工作狂技术狂,同感,一样的感觉……不过我才刚毕业一年……搞IT就是玩……
jinlking:这个botton的实现只是在主窗口画了一块区域,对于事件的处理还要放在主窗口的窗口处理函数之中,在对应的消息处理上调用CheckTap来判断是否是此“按钮”,问一下,这种方法与把按钮封装在子窗口中有什么区别,二者使用那个更好?
KUODY:博主真是好人
文章分类
收藏
    相册
    动漫
    文章图片
    程序交流
    xumercury的BLOG
    狗友们的博客
    清蒸石斑鱼
    美女如刀锋
    茁茁的BLOG
    魅力老姐的窝
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 USB2DEMON烧录DBAU1200开发板flash入门教程收藏

    新一篇: Anxiety of you | 旧一篇: 读取DBAU1200开发板的BOOT FLASH参考代码

    //========================================================================
    //TITLE:
    //    USB2DEMON烧录DBAU1200开发板flash入门教程
    //AUTHOR:
    //    norains
    //DATE:
    //    Friday  6-June-2008
    //Environment:
    //    NONE
    //========================================================================
        因为AU1200的BOOT MODE先天不足,不能像很多ARM系列的CPU那样,可以通过从USB HOST启动,然后烧录片上FLASH,所以我们往往只能再购买一个仿真器,然后连接板子的EJTAG口来烧录FLASH。只是支持AU1200这款CPU的仿真器少之又少,RMI原厂推荐的仿真器也就只有BDI系列,可一个BDI2000售价就达3w,即使是从台湾带货,价格也在2.6w左右,所以让很多人望而却步。因为最近项目因素,需要一个仿真器烧录flash,在网上搜索,发现Macraigor公司的产品有支持AU1200的仿真器。经过权衡比较,最后决定购入该公司的一款usb2demon。不过由于文档不够详尽,很多细节没有表述清楚,以至于一开始自己走了不少弯路。在此将自己的烧录过程撰文,以使各位朋友少走点弯路。
       
        首先当然是将仿真器连接到板子上的EJTAG口,安装驱动啊之类的琐屑东西,这部份就不详细说了,做这行的应该都知道。不过需要注意的是,EJTAG是14PIN的,插的时候注意不要插反了。仔细查看USB2DEMON的插座,会发现蓝色线的旁边有一个小三角符号,这个代表这个pin为1脚。
       
        硬件连接好之后,因为需要烧录flash,所以必须要让AU1200处于调试状态。
       
        首先打开配套的OCD Commander软件,最先弹出的是一个连接对话框。如图1:
       
       
        这里根据文档,我们将OCD SPEED设置为2:12MHZ。好像默认的1:24也可以,不过没有试过,也不知道会不会在调试中一些奇奇怪怪的问题是因为该速度,所以我们还是老老实实按照文档设置为2:12MHZ。
       
        确定之后,弹出命令对话窗口,如图2:
       
       
        输入halt,让CPU进入debug状态。为了检查命令是否成功,可以输入status命令,查看是否成功进入debug状态,如图3:
       
       
        接下这部就是非常重要,在命令行中键入reset,让CPU进行复位。然后我们再键入PC,如果返回的数值为BFC00000,即复位成功,如图4:
       
       
        在图中我们可以看到,第一次复位后,PC为00000002,这次复位是不成功的,所以之后又再复位了一次,这次再检查PC值,为BFC00000,意味第二次复位成功。
       
        在这里需要着重指出的是,如果复位不成功,俺么我们接下来的读取flash id,烧录flash等等一切操作,都将无一例外导致失败。
       
        复位不成功的原因很多,在此先举例一种。有的开发板在对ejtag处理时,发送reset命令后并没有再对AU1200的nRESETIN发送低点评,导致复位失败。如果出现这种情况,我们依次进行下列操作,也许可以解决问题:
       
        1)在OCD Commander中输入RESET
       
        2)硬件复位,可以通过按板子上的RESET键实现。注意的是,这个操作不能通过关机再开机实现。
       
        4)再次在OCD Commander中输入RESET,这时候检查PC应该已经是正确的BFC00000了。
       
        复位成功之后,关闭OCD commander软件,打开配套的OCD FLASH PROGRAMMER。点击Configuration->communicated,连接的OCD SPEED参数和OCD commander一致,都设为2:12MHZ,如图5:
       
       
        和BDI2000不同,USB2DEMON对DBAU1200的配置文件根本不可用,所以如果想通过OCD Programmer烧录flash的话,需要自己写相应的配置文件。在这里给出本人一个可用的ocd配置文件内容:
       
    [SETUP]
    CpuVendor=Alchemy/AMD
    CpuChip=AU1200
    CpuEndian=LITTLE
    FlashVendor=Spansion
    FlashChip=S29GL256M
    RamAddress=0xA0100000
    FlashAddress=0x1C000000
    FlashWidth=16
    FlashChipsPerSector=1
    LittleEndian=1
    SimCount=0
    MemoryCount=28
    Mem1=$B4000840:$3140060A:32:0
    Mem2=$B4000848:$A00A000C:32:0
    Mem3=$B4000800:$01272224:32:0
    Mem4=$B4000808:$01272224:32:0
    Mem5=$B4000820:$231003E0:32:0
    Mem6=$B4000828:$231083E0:32:0
    Mem7=$B4000848:$A00A008C:32:0
    Mem8=$B40008C0:$00000000:32:0
    Mem9=$B4000880:$C0000000:32:0
    Mem10=$B4000888:$C0000000:32:0
    Mem11=$B4000880:$80000000:32:0
    Mem12=$B4000888:$80000000:32:0
    Mem13=$B4000880:$40000440:32:0
    Mem14=$B4000888:$40000440:32:0
    Mem15=$B4000880:$00000532:32:0
    Mem16=$B4000888:$00000532:32:0
    Mem17=$B4000848:$A00A008C:32:0
    Mem18=$B40008C0:$00000000:32:0
    Mem19=$B40008c8:$00000000:32:0
    Mem20=$B40008c8:$00000000:32:0
    Mem21=$B4000880:$00000432:32:0
    Mem22=$B4000888:$00000432:32:0
    Mem23=$B4000840:$B140060A:32:0
    Mem24=$B4000848:$A002000C:32:0
    Mem25=$B4001000:$002D0043:32:0
    Mem26=$B4001004:$066181D7:32:0
    Mem27=$B4001008:$11C03F00:32:0
    Mem28=$B1900038:$00000001:32:0
    ScanChainCount=0


        将这些配置内容复制粘贴到记事本,然后保存为一个以.ocd为后缀的文件,再通过“FILE -> Open .ocd file...”打开刚刚保存的文件,软件将自动读入配置,如图6:
       
       
        在这里有一点需要注意的是,我所用的开发板的NOR FLASH是S29GL256M,如果实际与此不符,可修改相关字段。
       
        为了确认配置是否正确,我们可以点击“FLASH ID”按钮进行检测。如果Expected和Read from Flash的数值相同,那么证明我们的设置为正确的,如图7:
       
       
        如果FLASH ID读取正确,那么我们就可以进行erase操作。其实在烧录flash时可以同时选择在program之前进行擦写,在这里之所以先进行擦写,主要是为了排错方便。
       
        点击“erase”按钮,弹出个对话框,会有两个选项:“Erase entire chip”和“Erase specific sector”。在这里比较倾向于选择第二项,没别的原因,仅仅是因为选择第一项的时候,进度条显示不准确,看着让人心焦。如果选择第二项,不用说,我们就选择所有的sector进行擦除,如图8:
       
       
        擦除成功之后,就是我们的重中之中了,烧录FLASH!不过这里有个问题,因为USB2DEMON并不支持DBAU1200的这种双片FLASH的连接方式,所以我们在配置文件中FlashChipsPerSector只设置为1,这样一来的结果就是,我们flash的烧录地址只能是0x1C000000~0x1DFF0000。
       
        不过没关系,树挪死,人挪活,这点小事还难不倒我们。现在以烧录BOOT FLASH为例:
       
        1)将S1拨动到NO DOT位置。注意,是NO DOT位置,这时候D6 LED会亮起来。
       
        2)点击“Program”按钮,选择需要烧录的SREC文件,然后将“Start Programming Flash Address”设置为0x1DC00000。注意,不是0xBFC00000,也不是1C000000,而是0x1DC00000,如图9:

       
        至于为什么是该地址,请参考我另外一篇文章:小议DBAU1200 Development Board的Boot Flash更新(http://blog.csdn.net/norains/archive/2008/04/15/2293461.aspx)
       
        3)点击“Program”进行烧录。如果当初的FLASH ID读取正确,erase又正常的话,在这里应该不会有什么问题。
       
       
        如果是烧录PARAMETER FLASH的话,只需要将第一步的拨动开关打到DOT位置,其它步骤依旧即可。

    发表于 @ 2008年06月06日 21:33:48|评论(loading...)|编辑|

    新一篇: Anxiety of you | 旧一篇: 读取DBAU1200开发板的BOOT FLASH参考代码

    评论:没有评论。

    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © norains