AT32 F435简介3/N Memory Mapping

本文比较了AT32F435和STM32F405的内存映射,指出两者在功能布局上有显著差异,这要求ChibiOS的适配工作量大,且存在未明确区域需进一步确认。

1. 源由

  1. 对比STM32 F405进行AT32 F435 MCU的资料研读,期望获取更多差异化信息;
  2. 配合ChibiOS的porting工作,有理有据;
  3. 寻找AT32 F435的一些亮点功能和特性;

2. Memory Mapping

在这里插入图片描述

2.1 AT32 F435

  • 512MB block0 (Code): 0x0000_0000 ~ 0x1FFF_FFFF

0x0000_0000 ~ 0x002E_FFFF (3008K, 0x0040_0000) Aliased to Flash, SRAM or boot memory depending on BOOT pins
0x002E_FFFF ~ 0x003E_FFFF ???
0x003F_0000 ~ 0x07FF_FFFF Reserved
0x0800_0000 ~ 0x081F_FFFF (2MB) Internal Flash memory bank 1
0x0820_0000 ~ 0x082E_FFFF (960K) Internal Flash memory bank 2
0x082F_0000 ~ 0x083E_FFFF ???
0x083F_0000 ~ 0x0FFF_FFFF Reserved
0x1000_0000 ~ 0x1000_FFFF (64K) SRAM1 mapping
0x1001_0000 ~ 0x1FFE_FFFF Reserved
0x1FFF_0000 ~ 0x1FFF_3FFF (16K) Boot memory
0x1FFF_4000 ~ 0x1FFF_BFFF Reserved
0x1FFF_C000 ~ 0x1FFF_CFFF (4K) User system data
0x1FFF_D000 ~ 0x1FFF_FFFF Reserved

  • 512MB block1 (SRAM): 0x2000_0000 ~ 0x3FFF_FFFF

0x2000_0000 ~ 0x2000_FFFF (64K) SRAM1
0x2001_0000 ~ 0x2003_7FFF (160K) SRAM2
0x2003_8000 ~ 0x21FF_FFFF Reserved
0x2200_0000 ~ 0x22BF_FFFF (12M) Bit-band alias of SRAM
0x22C0_0000 ~ 0x3FFF_FFFF Reserved

  • 512MB block2 (Peripherals): 0x4000_0000 ~ 0x5FFF_FFFF

0x4000_0000 ~ 0x4007_FFFF (512K) Peripheral 1
0x4008_0000 ~ 0x41FF_FFFF Reserved
0x4200_0000 ~ 0x42FF_FFFF (16M) Bit-band alias of peripheral 1
0x4300_0000 ~ 0x4FFF_FFFF Reserved
0x5000_0000 ~ 0x5005_03FF (321K) Peripheral 2
0x5005_0400 ~ 0x5FFF_FFFF Reserved

  • 512MB x 2, block3/4: 0x6000_0000 ~ 0x9FFF_FFFF

0x6000_0000 ~ 0x6FFF_FFFF XMC(PSRAM/SRAM/NOR)
0x7000_0000 ~ 0x8FFF_FFFF XMC(NAND)
0x9000_0000 ~ 0x9FFF_FFFF QSPI1

  • 512MB block5: 0xA000_0000 ~ 0xBFFF_FFFF

0xA000_0000 ~ 0xA000_0FFF XMC registers
0xA000_1000 ~ 0xA000_2FFF QSPI registers
0xA000_3000 ~ 0xA7FF_FFFF Reserved
0xA800_0000 ~ 0xAFFF_FFFF XMC(PC Card)
0xB000_0000 ~ 0xBFFF_FFFF QSPI2

  • 512MB Bank6: 0xC000_0000 ~ 0xDFFF_FFFF

0xC000_0000 ~ 0xDFFF_FFFF XMC(SDRAM)

  • 512MB Bank7: 0xE000_0000 ~ 0xFFFF_FFFF

0xE000_0000 ~ 0xFFFF_FFFF Cortex-M4 internal peripherals

2.2 STM32 F405

  • 512MB block0 (Code): 0x0000_0000 ~ 0x1FFF_FFFF

0x0000_0000 ~ 0x000F_FFFF (1M) Aliased to Flash, system memory or SRAM depending on BOOT pins
0x0010_0000 ~ 0x07FF_FFFF Reserved
0x0800_0000 ~ 0x080F_FFFF (1MB) Flash
0x0810_0000 ~ 0x0FFF_FFFF Reserved
0x1000_0000 ~ 0x1000_FFFF (64K) CCM data RAM
0x1001_0000 ~ 0x1FFE_FFFF Reserved
0x1FFF_0000 ~ 0x1FFF_7A0F (30K+) System memory + OTP
0x1FFF_7A10 ~ 0x1FFF_7FFF Reserved
0x1FFF_C000 ~ 0x1FFF_C007 (8B) Option Bytes
0x1FFF_C008 ~ 0x1FFF_FFFF Reserved

  • 512MB block1 (SRAM): 0x2000_0000 ~ 0x3FFF_FFFF

0x2000_0000 ~ 0x2001_BFFF (112K) aliased by bit-banding
0x2001_C000 ~ 0x2001_FFFF (16K) aliased by bit-banding
0x2202_0000 ~ 0x3FFF_FFFF Reserved

  • 512MB block2 (Peripherals): 0x4000_0000 ~ 0x5FFF_FFFF

0x4000_0000 ~ 0x4000_7FFF (32K) APB1
0x4000_8000 ~ 0x4000_FFFF Reserved ???
0x4001_0000 ~ 0x4001_57FF (22K) APB2
0x4001_5800 ~ 0x4001_FFFF Reserved
0x4002_0000 ~ 0x4007_FFFF (384K) AHB1
0x4008_0000 ~ 0x4FFF_FFFF Reserved
0x5000_0000 ~ 0x5006_0BFF (387K) AHB2
0x5006_0C00 ~ 0x5FFF_FFFF Reserved

  • 512MB x 4, block3/4/5/6: 0x6000_0000 ~ 0xDFFF_FFFF

0x6000_0000 ~ 0xA000_0FFF (4K) AHB3
0xA000_1000 ~ 0xDFFF_FFFF Reserved

  • 512MB Bank7: 0xE000_0000 ~ 0xFFFF_FFFF

0xE000_0000 ~ 0xE00F_FFFF Cortex-M4 internal peripherals
0xE010_0000 ~ 0xFFFF_FFFF Reserved

3. 总结

从内存功能映射角度,AT32 F435和STM32 F405完全不一样。

因此,HAL适配需要很大的工作量。

PS:从上图对比分析中看出,仍然存在???重叠或者漏地址的问题,需要进一步确认。

4. 参考资料

【1】Ardupilot开源飞控之ChibiOS简介
【2】ARTERY AT32F435
【3】ST STM32F405/415

Thread 9 "test_vslam" received signal SIGSEGV, Segmentation fault. [Switching to Thread 0x7fffceffd700 (LWP 124958)] 0x00007fffef4d6dcd in _IO_str_init_static_internal (sf=sf@entry=0x7fffceff4018, ptr=ptr@entry=0x555555a64e7d "8", size=size@entry=0, pstart=pstart@entry=0x0) at strops.c:41 41 strops.c: 没有那个文件或目录. (gdb) bt #0 0x00007fffef4d6dcd in _IO_str_init_static_internal (sf=sf@entry=0x7fffceff4018, ptr=ptr@entry=0x555555a64e7d "8", size=size@entry=0, pstart=pstart@entry=0x0) at strops.c:41 #1 0x00007fffef4a6343 in _IO_strfile_read (string=0x555555a64e7d "8", sf=0x7fffceff4018) at ../libio/strfile.h:95 #2 __GI___isoc99_sscanf (s=s@entry=0x555555a64e7d "8", format=format@entry=0x7fffef5f88f7 "%hu%n:%hu%n:%hu%n") at isoc99_sscanf.c:28 #3 0x00007fffef514752 in parse_offset (tzp=tzp@entry=0x7fffceff4250, whichrule=whichrule@entry=0) at tzset.c:207 #4 0x00007fffef514dda in __tzset_parse_tz (tz=<optimized out>) at tzset.c:132 #5 0x00007fffef517094 in __tzfile_compute (timer=timer@entry=1762852089, use_localtime=use_localtime@entry=1, leap_correct=leap_correct@entry=0x7fffceff42d8, leap_hit=leap_hit@entry=0x7fffceff42d4, tp=tp@entry=0x7fffef6344e0 <_tmbuf>) at tzfile.c:630 #6 0x00007fffef5159f1 in __tz_convert (timer=1762852089, use_localtime=1, tp=0x7fffef6344e0 <_tmbuf>) at tzset.c:580 #7 0x00007fffe8621506 in hdi_logging () at /home/ki-zj-2587/code/develop_branch/MPA-SLAM/OSS/Linux/Bin/hdilog/libhdilog.so #8 0x00007fffe634ca47 in hdi_navi::LocationMap::changeData(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (this=<optimized out>, dataDir=...) at /usr/include/string.h:248 #9 0x00000000372ef606 in () #10 0x83f1f2e45d161d00 in () #11 0x00000000372ef606 in () #12 0x00007fffe635f467 in hdi_navi::LocationMapTask::processTask(unsigned int) (this=<optimized out>, tick=tick@entry=0) at /home/ki-zj-2587/code/develop_branch/MPA-SLAM/modules/slam/mapping/vector_mapping/sd_map/map_engine/modules/wrapper/locationmaptask/locationmap_task.cpp:69 #13 0x00007fffefde17d4 in gyMapSdk::getTopoMapFunc(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&) (path=...) at /home/ki-zj-2587/code/develop_branch/MPA-SLAM/modules/slam/mapping/vector_mapping/map_processor/MapSdk.h:312 #14 0x00007fffefdff099 in std::_Function_handler<void (std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&), void (*)(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&)>::_M_invoke(std::_Any_data const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&) (__functor=..., __args#0=...) at /usr/include/c++/9/bits/std_function.h:88 #15 0x00007fffe66d54d3 in std::function<void (std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&)>::operator()(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&) const Python Exception <class &#39;AttributeError&#39;> &#39;NoneType&#39; object has no attribute &#39;pointer&#39;: (__args#0=std::map with 3 elements, this=0x7fffe6759ec0 <s_set_result_file_func>) at /usr/include/c++/9/bits/std_function.h:683 #16 set_ctrl_flag(unsigned char) (flag=<optimized out>) at /home/ki-zj-2587/code/develop_branch/MPA-SLAM/modules/slam/mapping/vector_mapping/sd_map/topo_map/modules/topo_route_memory/src/topo_main_process.cpp:260 #17 0x00007fffe64625c5 in core_topo::NodeHcTopo::Impl::set_complete_flag(unsigned char) (flag=<optimized out>, this=<optimized out>) at /home/ki-zj-2587/code/develop_branch/MPA-SLAM/modules/slam/mapping/vector_mapping/sd_map/topo_map/modules/topo_route_memory/api/node_hc_topo.cpp:78 #18 core_topo::NodeHcTopo::set_complete_flag(unsigned char) (this=<optimized out>, flag=<optimized out>) at /home/ki-zj-2587/code/develop_branch/MPA-SLAM/modules/slam/mapping/vector_mapping/sd_map/topo_map/modules/topo_route_memory/api/node_hc_topo.cpp:78 #19 0x0000000000000000 in ()
最新发布
11-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值