astankvai 发表于 2021-2-5 22:15:13

TKM32F499 入门学习笔记(1):启动分析

本帖最后由 astankvai 于 2021-2-5 22:28 编辑

学习一款单片机, 首先要了解其启动流程以及存储器映射,但是, TKM在这方向的资料, 基本等于0。 于是分析代码:
   1. BOOT引脚接地,该设置理解为 从 ROM启动
   2. PA1 ,    可以理解为: 当PA1为高电平时,从系统ROM启动(ROM的地址在芯片规格书中写的是 0x1FFF 0000- 0x1FFF 3FFF), 共16KB。 这个有点像ST的DFU,内置的bootloader. 当PA1为0时,从用户程序启动(可以理解为通常所说的0地址). 但是,这里相当于浪费资源, 应该设计成根据boot脚的电平来进DFU boot还是跑其他用户应用。
   3. PA13,这个是一个自定义的bootloader使用的检测入口, 当该引脚为高电平时, 停留在boot中(这个usb boot是在用户程序空间的,占用用户程序空间).这个boot不是必须的。 用户可以自己编写。
   4. QSPI.从规格书可以看到, QSPI 没有提到映射到程序存储空间,是copy代码到ram执行还是XIP, 这个我们不知道。 但是, 从下载工程的配置以及下载算法可以分析出, QSPI 被映射到程序存储空间 0x70020000, 长度2MB. 如果使用大容量SPI NOR, 估计可能会有问题,用QSPI访问没有问题,但是映射空间方式可能访问不了。 更新:看了程序, 0x70020000是 SDRAM的起始地址, 由此看来,程序是从spi nor中被copy到sdram中,然后在ram执行的。
   5. 中断向量的重映射。如果自己写bootloader,这个是必须要关心的, 但是规格书没有提到相关的信息。 示例程序一开始就有一个RemapInterrupt函数, 这个就是中断向量的重映射,可以分析map文件。 SCB->VTOR = 0;
        SCB->VTOR |= 0x1<<29;示例代码有相关程序, 但是规格书或是TRM中, 没有任何相关信息。
   6. SRAM。从程序 看,起始地址是0x2000 0000, 大小未知。


tiky 发表于 2021-2-6 00:24:57

       楼主简单几句话,洋洋洒洒地分析了对TK499的启动流程,流露出了对国产单片机的热爱,难能可贵。众多应用开发者当中,感觉到你那股清流,是对国产单片机的执着信念。
       感谢你的支持,我这有两款即将上市,配合TK499作重点应用展示的IPS高端屏,打算送给你以示鼓励。你看方便的话到我们的官方淘宝店,随便拍一样东西,留言“启动分析送屏”,请不要付款,客服获取你的收件地址后直接给你寄送。

astankvai 发表于 2021-2-6 00:29:35

tiky 发表于 2021-2-6 00:24
楼主简单几句话,洋洋洒洒地分析了对TK499的启动流程,流露出了对国产单片机的热爱,难能可贵。众多 ...

谢谢版主。
目前来说国产的文档资料是有欠缺, 希望大家能一起完善, 把一些调试过程遇到的坑一起填了!

astankvai 发表于 2021-2-17 10:04:03

继续上次:
       因为在为TKM32F499写一个USB HID的bootloader,所以需要探究启动流程。现在bootloader基本已经工作, 但是还是有些小问题没有解决。
    通过实际的测试发现,这个芯片是把程序存储在SPI NOR中, 启动时, 通过ROM程序把代码从spi nor中搬运到sdram中运行。 sdram 的地址目测是从0x70000000 开始, 之后连续的8MByte。当然, boot ROM应该XIP, 直接在flash rom中运行,这个不需要copy到sdram中执行。所以, 理论上说, 程序 代码可以最高8MB (自由ram使用量只有sram的4K).从中断向量的映射来说, 好像是把sram映射到0地址, 这个,就需要把中断向量表copy到 sram中, 0x20000000, 这和st等其他MCU的地址是一样的。 但是有一点奇怪的是: MEM_MODE的值并不是3, 而是0。 还有一点就是bootloader中使用的中断, 在应用再使用, 就会用不了, 应该不是中断映射的问题, 可能是其他初始化问题, 需要再进一步分析。
       目前测试,给人的感觉是芯片不太稳定,手动复位, 有时会起不来,上电复位有时也会起不来。 晚点加个复位芯片再试一下。

战0舰 发表于 2021-2-17 13:01:07

astankvai 发表于 2021-2-17 10:04
继续上次:
       因为在为TKM32F499写一个USB HID的bootloader,所以需要探究启动流程。现在bootloader ...

我也遇到过很多次这种情况,比如复位键按的时间长了一点就会直接死掉,jlink连上读了下发现是直接进Memfault,可能是是SDRAM控制器或者哪里的问题,只有得断电复位才能解决,复位芯片可能用处不大

astankvai 发表于 2021-2-17 13:33:48

战0舰 发表于 2021-2-17 13:01
我也遇到过很多次这种情况,比如复位键按的时间长了一点就会直接死掉,jlink连上读了下发现是直接进Memfa ...

是的, 刚加了复位芯片, 也还是有这种情况。可能与电源设计有关,多个电源的上电时序可能有要求。 另外,还发现LTDC 有点奇怪,直接写一个层的几个点, 屏幕没有反应,多写几行或几个层才有反应,不知道底层的dma是怎么控制 的。

也不知道有没有用这颗芯片量产过项目。

LVmcu 发表于 2021-2-18 05:19:52

谢谢分享!!!

蓝蓝的恋 发表于 2021-5-12 18:19:11

bootloader中使用的中断, 在应用再使用的时候需要先注销,然后再用吧

astankvai 发表于 2021-5-14 08:24:14

蓝蓝的恋 发表于 2021-5-12 18:19
bootloader中使用的中断, 在应用再使用的时候需要先注销,然后再用吧

不需要,使用的中断向量表不一样。 中断入口地址都不一样了。
页: [1]
查看完整版本: TKM32F499 入门学习笔记(1):启动分析