|
AG32芯片内的两个核和两个binAG32芯片内的两个核和两个bin
一、概述:与传统单核芯片(如:ST系列)不同,AG32整颗芯片包含两个核:mcu和cpld。 这里的mcu核已经相当于ST的整颗芯片。而CPLD核是比普通芯片多出来的那个核。 这两个核是相互独立的(各自编译、各自下载),又可以相互连通起来(信号连通)共同工作。 所以,AG32工程会编译出来2个bin。一个是代码的bin,一个是逻辑的bin,称之为code.bin和logic.bin。最终使用时,需要把这两部分的bin都烧录进去,芯片才能工作起来。 mcu编译出来bin容易理解,在VScode下点编译就可以了。 cpld的bin,则根据使用方式的不同,生成方式也会不同。参照以下介绍。 . 二、两个bin怎么生成根据使用预期的不同,分成三种情况: 1.只使用mcu部分,不使用cpld部分; 2.同时使用mcu和cpld来联合编程; 3.只使用cpld部分,不使用mcu部分; 首先说明的是,以上3种方式都是会生成2个bin的。只不过情况1和情况3生成出来的第二个bin,是系统自动做的,用户无感而已。 分别说明: 情况1:如果芯片中只使用mcu不使用cpld: 此时,VE文件里只配置mcu用到的PIN脚即可。 这种情况下,vscode工程中点“upload LOGIC”时,会自动生成默认logic(该logic中“用户逻辑”为空而已),并编译出bin,再烧录,一键完成全过程。(这里的logic可以认为是cpld.bin) 整个过程中,logic部分对开发者来说是无感的。 情况2:如果芯片中同时使用mcu和cpld: 这种开发过程参照 mcu+cpld联合开发 ,这里只简要描述cpld.bin的生成。 这种模式下,VE文件里需要配置 mcu和pin之间、mcu和cpld之间、cpld和pin之间 的信号关联。 然后在VScode下点“prepare LOGIC”按钮,会为开发者生成CPLD的空的框架工程。开发者需要在这个框架下完成cpld逻辑的编写。这个编写调试中,开发者持有主动权。等cpld逻辑全部开发完成,自己编译出bin。这个bin就是“情况1”中自动生成出来的那个bin。 生成cpld.bin以后,烧录就又回到VScode下,仍然是点“upload LOGIC”去烧录。 情况3:如果芯片中只使用cpld不使用mcu: 这种开发过程参照 纯CPLD开发 ,这里也只是简要描述bin的生成。 这种模式下,开发过程是在quartus环境下完成的,首先是生成cpld.bin运行调试。而mcu的bin则是自动生成的。 跟“情况1”刚好相反:cpld.bin是自己调试生成,mcu.bin是系统自动生成。 . 三、两个bin怎么调试和烧录mcu的调试,在VScode下进行。 cpld的编写,需要使用quartus和supra两个工具。目前cpld的调试,不支持在线工具,可以使用modelsim进行模块级测试。 VScode下的烧录,烧录两个bin,分别使用“Upload”和“Upload LOGIC”两个按钮。
而Supra下烧录cpld,则使用Supra的upload功能。 最后,用于生产时,都是要生成二合一的batch.bin的。用downloader.exe工具来烧录这个bin。
四、flash大小与两个bin的烧录位置关于芯片flash大小: 在AG32系列中,flash大小有两个型号:256K和1M. flash起始地址从0x80000000开始。flash的可擦写块大小为4K(每次擦写的最小单位为4K,每块的擦写起始是4K对齐)。具体读、写、擦的函数,请参考example工程下的example_flash.c。 整片flash上需要存储基础的两个bin:code.bin和logic.bin(logic.bin就是cpld部分编译后的bin)。其他区域可供用户使用(存储用户信息)。 默认情况下,code.bin存储到0x80000000,logic.bin存储到最后100K。 也就是说,不管所选型号的flash是256K还是1M,最后100K都是留给fpga/cpld使用的。 如果使用的芯片是256K的flash,那么就是156K程序+100K的cpld.bin,即:用户程序不能超过156K。如果超过156K编译是可以通过的,但烧录后会冲掉logic部分。 logic被冲掉后,程序运行会表现出各种异常(通常是系统时钟初始化失败)。 如果程序code.bin的size比较大,cpld.bin又刚好比较小,可以调整这个界限的值。调整方法如下: board_logic.compress = true //(可选)对cpld.bin部分进行压缩,更省空间。压缩后小于48K。通常程序可能小于30K。 board_upload.logic_address = 0x80034000 //存放cpld.bin的起始点。根据实际情况调整该边界值。 //flash的大小是在agrv2k_103.json 中定义的。 //flash起始地址是0x80000000,ram是0x20000000。 bin的存储与运行: code.bin和cpld.bin都是存储在flash上的。 运行时,cpld.bin被加载到cpld内核区域运行(注意,这个区域不是芯片的128K的ram区)。code.bin则仍然在flash区域运行。 五、其他说明在使用MCU时,如果不用CPLD部分,是不是CPLD就是多余的? 不是的。 整个芯片的开发,依赖于配置文件.ve。在这个配置文件里,需要用户配置需要使用到的时钟和全部引脚。这里边配置的引脚,就是生成到cpld.bin去的。 这里又引入另一个概念:mcu信号和引脚。这部分内容比较多,详情请参考 引脚配置 。这里只要知道,需要该cpld的参与,mcu的信号才能最终使能到引脚。
需要获取更多的“资料”和“支持”和“批量采购”可以联系我们 提供“芯片测样-发送资料-技术支持-批量采购” 联系方式: 姚工 13661545024(VX同号) (加的时候备注下公司名和个人名字) 在线商城:agm-micro.taobao.com 公司网站:www.agm-micro.com 资料网站: www.tcx-micro.com |