W801单片机学习笔记——内部结构,总线架构篇
如果文章出现需要关注或VIP才可看全文请在评论区提醒我修改谢谢笔者所有文章全部免关注免费用重在分享。1.前言在于各个型号的单片机打交道的这几年越发清晰得发现学习一款单片机一定不能把它当作一个神奇的黑盒子否则只能跑跑SDK带的例程感动自己。经过在联盛德官网一通搜寻猛如虎下终于找到了类似于参考手册和数据手册的文档他们分别叫寄存器手册和产品规格书下载连接如下链接https://pan.baidu.com/s/1KG5hJetnraERyEQtrSYIdQ提取码SYHTCSDN资源下载连接如下W801参考手册寄存器手册W801数据手册产品规格书-单片机文档类资源-CSDN下载2.W801单片机里面有什么各部分之间有何关系一般情况在数据手册会有该单片机的总体功能介绍、管脚定义、电气特性等可以从总体功能介绍中获知内部有什么。如下图产品规格书第6页从图中上半部分可以看到W801单片机里面有平头哥的XT804处理器2MB的FLASH288KB的SRAM 蓝牙、WiFi以及他们公用的天线射频功放。下半部分有8通道的DMA安全相关外设SDIO主接口PSRAM接口等等外设均与我们在购买该芯片时的宝贝详情相符合其余的就不一一介绍了。这个图可以告诉我们W801里面有什么但是要想用起来W801还是不够的这幅图并没有明确表示各个部分之间的关系于是我们需要看参考手册寄存器手册43页如下图从该图中可以看到W801单片机内部可以划分为两个由AHB总线矩阵连接起来部分连部分之间通过总线桥相连接其次仔细看会发现288KB的SRAM虽然在地址上是连续的但实质上是由与AHB BUS1相连接的160KB和与AHB BUS2相连接的128KB两部分组成的在使用时合理分配内存可以最大限度得减小总线上的延迟更加充分发挥处理器和外设的性能。例如与计算相关的缓冲区应当放在AHB BUS1相连接的SRAM内外设的输入输出缓冲区应当放在AHB BUS2相连接的SRAM内。眼尖的朋友们可能第一眼看到这个图就发现AHB总线这个东西了这是个老朋友基于Cortex-M内核的单片机几乎都用这个比如我们的老铁STM32按经验来讲既然有AHB那APB必然不会缺席就调那外设最多的地方定能把他抓得住。果不其然右下角一堆外设的框框上面赫然写着APB BUS。不过好戏还没有结束在这群外设里面找了一圈儿发现”宝贝详情“里面介绍的几个牛逼外设怎么不见了呜呜呜不会被骗了吧没有他们在图左侧有自己独立的办公室SDIO从接口和高速SPI单独使用外设总线连接AHB总线SDIO主接口和PSRAM单独使用外设总线单独连接了AHB总线。不得不说W801单片机设计的非常走心这个格局让人不由得想起了牛逼哄哄的STM32H743对比STM32H743的总线构架图如下STM32H743单片机同样使用了多个总线矩阵的设计同样是每个总线矩阵都有自己的SRAM和APB连接外设同样是将高速外设放置在CPU所在的总线并且给高速外设从总线矩阵分配了高速接口而非通过APB总线。不过STM32H743还有一个优势即每个总线矩阵都有各自的DMA这样可以极大得降低在有大量数据从外设通过DMA输入或输出时总线矩阵间的总线桥的压力。W801由于只有AHB BUS1有DMADMA在工作时需要通过总线桥才能完成工作会占用总线桥大量带宽。当然这只是理论上的分析实际情况是AHB总线带宽很高在STM32F4或STM32F7上同时使用摄像头和LCD并使用DMA实时接收摄像头图像并刷新显示到LCD时总线时若再增加其余大量的输入输出操作如以太网功能等才会出现总线卡壳的情况这也是STM32H7系列直接上AXI总线的原因。反观W801该单片机没有大吞吐量的外设所以也无需给每个总线矩阵都给一个DMA 了。最后在两个文档中没有找到总线与设备的互联关系表实属遗憾。通过该表可以清晰得知道每个具体的部分之间的连接关系尤其要知道那些部分之间没有连接这样可以避免在实际使用中出现莫名其妙的错误比如STM32H743的SDMMC1躲猫猫问题最后看了互联关系表才发现SDMMC1就根本没有连接我的缓冲区所在的SRAM。既然没有找到这个图那就把希望寄托在SDK上面吧乖巧跟着SDK走好了。至此W801的内部结构分析完毕。3.W801的内存映射W801作为一个32位单片机与32位单片机众生一样具有32位的直接寻址范围范围之大再多外设都装得下如下图寄存器手册48页从图中可以看到W801当前只使用了Block0、Block1、Block2这三个块还有三个块保留没有使用。其中外设部分的地址映射我们可以直接交给SDK而FLASH和SRAM的映射我们需要仔细看。首先是FLASH首先是从0X0000_0000地址开始的启动扇区这部分存储的代码是出厂就有的这部分代码负责在正常运行状态下引导单片机从0X0800_0000地址开始的FLASH启动或是在更新固件状态下引导单片机从串口更新固件例如在使用配套软件Upgrade Tools时就需要这样做。我们写的代码会存储在起始地址为0X0800_0000的那个FLASH里面这个FLASH也正是”宝贝详情“里面说得2MB的那个大FLASH。其次时SRAM 书接上文SRAM实际是两部分这幅图中的SRAM 160K是上文提到的连接在AHB BUS1上的那个SRAM”Mac SRAM 128K“是上文提到的连接在AHB BUS2上的SRAM。可以看到地址确实是连续的且分界线为0X2002_8000。然后是外部扩展PSRAM这个我个人认为不太能用到因为W801加上背板页不过58个引脚再剪掉供电用的引脚剩下的就很少了接个PSRAM的话外设几乎没得接了所以在通常的使用场景下也用不到这个PSRAM。最后分析完图我们回到CDK的工程在CDK工程中的设置界面中的Target页有如下的设置红色框框中的内容正是对应了映射表中FLASH 和SRAM的配置为了方便使用可以把两部分SRAM分开写在不同的地方 这个界面和KEIL5的几乎一样因此这里就直接用KEIL5给大家举例子了在设置时除了需要仔细确认地址是否正确外还需要谨慎每个RAM和ROM前面的复选框即CDK中的In use选项和KEIL5中的default选项这个选项将会决定从哪个ROM启动并将哪个RAM作为主堆栈。例如在启动初期外部扩展内存控制器还未初始化若将主堆栈选择在了外部扩展内存将无法启动。这样一通操作后KEIL5的话就可以直接在右侧的工程树状图中选择分组或者单个文件规定其存放位置不过CDK的话emm不行哈哈。看到这的朋友不要生气哈期待后续更新版本的CDK加上这个功能。在实际配合SDK使用时会发现好像在Target页面设置的东西根本用不到这是因为SDK之际写了一个分配存储的文件类似于KEIL5的分散加载文件在Link界面可以看到该设置若选择2处则使用Target页面的设置而SDK默认选择的1处配套使用的箭头所指的文件可以按右边放大镜图表的按钮来查看此文件 。该文件开头部分如下可以看到该文件开头分了I-SRAM、D-SRAM和V-SRAM三类从地址可以看到D-SRAM就是前面提到的两部分SRAM的合体V-SRAM就是外部扩展PSRAM。其次下方这个框决定了堆大小注意这个堆是处理器在内核级模式下使用的即全局变量和malloc申请的内存存放的地方在实时操作系统中实时操作系统申请的内存不在这个范围内注意不要混了4.上电跑一下吧终于到这个紧张刺激的环节了不过跑前需要先热个身具体是跑多快怎么跑两个问题。针对这个问题需要查看单片机的时钟树W801的时钟树如下图所示寄存器手册47页从图中可以看到W801单片机有一个倍频器倍频后通过各级分频器将时钟信号分配给XT804处理器内存外设等。时钟方面的设置正是需要配置一个倍频器和图中所示的那些分频器。这个工作以及在SDK中做好我们可以直接躺赢不过注意SDK中默认处理器工作在80MHZ我们需要通过设置将其修改为240MHZ具体修改方式为打开文件wm_main.c找到main函数找到如下函数调用并修改参数。wm_main.c文件寻找方式及修改内容如下图修改好后编译下载即可运行。5.下期预告SDK的启动流程以及部分文件的修改尝试。