Firefly开源社区

标题: QN902x的Memory organization疑问 [打印本页]

作者: xiaolong_ba    时间: 2015-4-21 11:17
标题: QN902x的Memory organization疑问
前言:
        最近要熟悉QN902x模块,故先把它当作普通单片机来用,然后再来了解蓝牙协议方面的知识,通过参考《上手教程》--->《环境搭建》以及结合Datasheet看,有如下几个疑问:

问题:
Q1:
      首先,QN902x的ROM是96KB、RAM是64KB、Flash是128KB;通过查看datasheet,ROM的地址即是0x00000000~0x00017FFF,RAM则是0x10000000~0x1000FFFF;但是Flash的地址是多少到多少?查看手册没有看有标地址从多少到多少?

Q2:       从《上手教程》--->《环境搭建》看,发现Flash的地址,如下图一所示:

图中的Flash地址是0x10000000~0x1000FFFF,这样不会跟RAM地址冲突吗?


Q3:
       查看资料说:

Q4:
      参考《上手教程》--->《环境搭建》看ROM和RAM的分配好像跟Datasheet的不一样啊,如下图二所示:


Q5:
      如果我要做IAP升级的话,那么我是不是直接调用Serial Flash的API写一个Bootloader程序,并将其烧入Flash的前面的几十KB大小里,然后一复位上电把Bootloader复制至RAM并运行再对Flash的User区进行擦除编写?






图一Flash.jpg (169.1 KB, 下载次数: 621)

图一Flash.jpg

图二.jpg (213.17 KB, 下载次数: 570)

图二.jpg

作者: FireBLE_blue    时间: 2015-4-21 15:19
本帖最后由 FireBLE_blue 于 2015-4-21 15:22 编辑

xiaolong_ba:
你的问题非常有意义,是每一个刚接触QN902x 或者接触新的mcu 开发者的必进之路,曾经我也这么走过来。
希望我的回答能帮助你的理解:


Q1:ROM和RAM 都能有各自的地址空间,Flash 没有对应的地址空间,因为此Flash 为 spi nor Flash ,不可直接被mcu 直接访问,他是存储code 的载体,不是执行code 的主体,烧录进Flash 的二进制,需要copy 到RAM 才能执行。

Q2:这里的Flash 地址 就是code 执行的绝对地址,code 编译后的二进制 最后是保存在RAM里以便mcu 取指。

Q3:
        1.是的,不能擦除,此部分的二进制在芯片生产的时候就掩膜(MASK)进去。
        2.编译链接后的二进制是保存在Flash(spi nor Flash)里,上电后,掩膜(MASK)在ROM 的bootload 会拷贝到RAM里,以便mcu 通过总线取指。

Q4:ROM 和 RAM 的分配 请参考 链接文件 的定义,对于 我们编写的 app 而言,项目编译的 Code、RO、RW、ZI段都定义在RAM 分布区(虽然是烧进Flash ,但不代表执行体在Flash ,bootload 会拷贝)
        如下:
  1.         ; *************************************************************
  2.         ; *** Scatter-Loading Description File generated by Quintic ***
  3.         ; *************************************************************
  4.         LR_ROM1 0x10000000 0xCDB0
  5.         {
  6.                 APP_CODE 0x10000000 0xCDB0
  7.                 {
  8.                         *.o (RESET, +First)
  9.                         startup.o (+RO)
  10.                         *(InRoot$Sections)
  11.                         .ANY (+RO)
  12.                         .ANY (+RW +ZI)
  13.                 }
  14.         }
复制代码

Q5:QN902x 提供了OTA 的蓝牙空中升级,如果要自己实现IAP ,可以直接把二进制文件烧录进Flash 里,但不是前面的几十KB 大小里,而是烧录进Flash 绝对地址 0x01100 ~0x1E000 处,并把相关的bootload information 烧录进 0x01000~0x01100。




作者: xiaolong_ba    时间: 2015-4-21 16:08
FireBLE_blue 发表于 2015-4-21 15:19
xiaolong_ba:
你的问题非常有意义,是每一个刚接触QN902x 或者接触新的mcu 开发者的必进之路,曾经我也这 ...

首先,非常感谢您的帮忙,现在已经大体了解了;根据您的回答,我还有两个疑问想问下你:
1、对于Q4的回答有以下这个疑问:
      疑问一:ROM 和 RAM 的分配最终还是要看链接文件的定义是吗?我看论坛的上手教程那里的指定地址与Datasheet的不符?

2、对于Q3的回答有以下这个疑问:
      ROM中的Bootloader的作用,除了蓝牙协议等内容以及把保存在Flash中0x01100 ~0x1E000的二进制文件拷贝至RAM里之外,具备对Flash擦除编程的作用吗?

对于Q5的回答,我刚在《ISP Studio manual》也找到了答案,如下图所示:
C:\Documents and Settings\Administrator\桌面\Flash Address Assignment.jpg
其他的疑问通过你的回答我已经明白了,再次感谢您的帮助:$


Flash Address Assignment.jpg (64.85 KB, 下载次数: 582)

Flash Address Assignment.jpg

作者: FireBLE_blue    时间: 2015-4-21 17:43
1.ROM 和 RAM 的分配 在MDK 里 的配置有2种,1种是手动编写链接文件 .sct ,第2种就是 填写如你贴的图上的内容, 至于MDK 在链接的时候选择哪一种方式在 Options for Target -> Linker ->Use Memory Layout form Target Dialog  该选项是否勾选。 至于截图内容与datasheet的不符,确实是的, 但如果就算按照截图的配置,条件符合也是能正常运行的,为什么?深究能得到对这个ic 或者 整个构架会有更深的理解。

2.bootload 除了搬运 代码功能外,也能配合 Quintic ISP Studio 进行串口烧写等功能。
作者: xiaolong_ba    时间: 2015-4-22 09:19
FireBLE_blue 发表于 2015-4-21 17:43
1.ROM 和 RAM 的分配 在MDK 里 的配置有2种,1种是手动编写链接文件 .sct ,第2种就是 填写如你贴的图上的内 ...

:victory:谢谢;现在明白了。。。哈哈。。。以后多多指教:lol




欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/) Powered by Discuz! X3.1