深入解析TMS320DM643x DSP启动引导:AIS脚本与多模式配置实践

深入解析TMS320DM643x DSP启动引导:AIS脚本与多模式配置实践 1. 项目概述在嵌入式系统开发中启动引导程序Bootloader是系统上电后运行的第一个关键软件它负责将处理器从“裸机”状态引导至一个可运行应用程序或操作系统的环境。对于德州仪器TI的TMS320DM643x系列数字信号处理器DSP而言其片上ROM中固化的Bootloader提供了多种灵活的启动方式而这一切的核心都围绕着一种名为AISApplication Image Script的专有脚本格式展开。如果你正在开发基于DM643x的工业控制、音视频处理或通信设备理解并掌握这套启动机制是确保产品稳定上电、快速加载和可靠运行的基础。简单来说DM643x的Bootloader就像一位经验丰富的“系统管家”。设备复位后它会首先检查芯片外部几个特定引脚BOOTMODE[3:0], FASTBOOT, AEM等的电平状态这个状态被锁存到BOOTCFG寄存器中。根据这个“启动菜单”的选择“管家”决定以何种方式去获取第一段用户代码——是从SPI Flash读取还是通过I2C EEPROM亦或是等待UART主机发送甚至是直接从EMIFA接口的NOR Flash启动。无论选择哪条路径最终送达“管家”手中的“货物清单”都必须是一份标准格式的AIS脚本。这份脚本不仅包含了要加载的程序代码和数据还精确地指示了“管家”如何配置PLL提升系统时钟、如何初始化DDR内存控制器、以及最终将控制权移交到哪个地址。本文将深入拆解AIS格式的每一个细节并手把手带你实践SPI、I2C、UART、NAND Flash及EMIFA等多种启动模式的配置让你彻底掌握DM643x的启动奥秘。2. 启动模式深度解析与硬件配置启动模式的选择本质上是在告诉Bootloader从哪里、以何种方式获取AIS脚本。DM643x的启动模式大致可分为三类非快速启动模式FASTBOOT0、固定倍频快速启动模式FASTBOOT1, AEM[2:0]001b和用户可选倍频快速启动模式FASTBOOT1, AEM[2:0]000b, 011b, 100b, 101b。选择哪种模式直接决定了Bootloader在开始加载AIS脚本前是否以及如何配置系统锁相环PLL从而影响整个启动过程的初始运行速度。2.1 启动引脚配置与模式选择硬件设计阶段你必须通过电阻上拉或下拉正确设置BOOTMODE[3:0]、FASTBOOT、AEM[2:0]、PLLMS[2:0]和PCIEN等引脚。这些引脚的状态在电源复位POR的上升沿被采样并锁存到BOOTCFG寄存器Bootloader随后读取该寄存器以决定行为。下面是一个典型的配置决策流程确定是否需要FASTBOOT如果你的应用对启动速度有要求或者需要使用PCI启动模式必须将FASTBOOT引脚拉高置1。这会使Bootloader在启动初期就配置PLL将CPU时钟从默认的晶振频率如27MHz提升到更高频率如270MHz对应PLLM19从而加速后续从外部存储器读取AIS脚本和数据的过程。选择具体的启动介质通过BOOTMODE[3:0]选择。例如0101bI2C EEPROM启动。0110b16位地址SPI EEPROM启动。1111b24位地址SPI EEPROM启动使用GPIO97作为片选。1000bUART启动无硬件流控。0111bNAND Flash启动必须连接至EMIFA CS2。0100bEMIFA ROM启动带AIS格式。配置PLL倍频如果FASTBOOT1如果AEM[2:0]被设置为001b则进入固定倍频模式PLL倍频器由BOOTMODE决定例如HPI模式可能有x27, x20, x15等选项其他模式通常为x20。如果AEM[2:0]为其他值如000b则进入用户可选倍频模式PLL倍频器由PLLMS[2:0]引脚决定范围从x15到x30。注意PLL的配置必须在芯片允许的时钟频率范围内。例如对于DM6437-600器件PLL输出频率不能超过600MHz。设计时务必查阅具体型号的数据手册确保你选择的倍频组合不会超频。2.2 各启动模式详解与硬件连接不同的启动模式对应不同的物理接口和通信协议硬件连接是成功的第一步。2.2.1 SPI启动模式16x8与24x8SPI启动利用McBSP0模块模拟SPI主控制器。关键在于正确连接引脚和配置时钟极性。16x8模式BOOTMODE0110b支持最大64KB16位地址的SPI EEPROM。连接方式为SPI EEPROMSn(片选) - DSPFSX0SPI EEPROMC(时钟) - DSPCLKX0SPI EEPROMD(数据输入MOSI) - DSPDX0SPI EEPROMQ(数据输出MISO) - DSPDR0Bootloader会将SPI时钟配置为无效态高电平CLKXP0并在时钟上升沿采样数据CLKSTP11b这与大多数标准SPI EEPROM的时序兼容。24x8模式BOOTMODE1111b支持更大容量16MB24位地址的SPI EEPROM。由于McBSP单次传输限制为32位而“8位命令24位地址8位哑元”需要40位因此Bootloader改用GPIO97作为片选并将McBSP配置为8位数据传输模式通过多次8位传输完成一次读操作。连接方式需调整为SPI EEPROMSn- DSPGPIO97SPI EEPROMC- DSPCLKX0SPI EEPROMD- DSPDX0SPI EEPROMQ- DSPDR0FSX0引脚悬空不接。2.2.2 I2C启动模式I2C启动模式要求一个I2C EEPROM作为从设备其7位从机地址必须固定为0x50即1010000b。Bootloader作为I2C主机会按照标准I2C协议读取数据。连接时务必在SDA和SCL线上接上拉电阻典型值4.7kΩ。Bootloader会根据FASTBOOT设置不同的I2C时钟频率标准模式约87kHz快速模式约310kHz你需要确保EEPROM支持相应的速率。2.2.3 UART启动模式UART启动是一种从机模式。Bootloader会先通过UART0发送字符串“BOOT ME”给主机如PC然后等待主机以ASCII字符形式发送AIS脚本。波特率固定为115200 bps8位数据1位停止位无校验。如果选择BOOTMODE1110b则启用硬件流控RTS/CTS这在高波特率或主机处理速度慢时有助于防止数据丢失。你需要一个UART转USB工具将DSP与PC连接。2.2.4 NAND Flash启动模式NAND启动要求Flash芯片连接到EMIFA的CS2片选。Bootloader会从块1Block 1开始搜索AIS魔数Magic Number自动跳过被标记为坏块Spare Area偏移0x4处为0xBADDBADD的区域并启用硬件ECC进行1位纠错。一个关键限制是Bootloader不支持需要切换片选Toggle操作的特殊NAND器件。在选型时必须确认你的NAND芯片型号在Bootloader的支持列表中如K9F系列等。2.2.5 EMIFA ROM启动模式这是最直接的启动方式之一。当BOOTMODE0100b时如果FASTBOOT0DSP硬件会直接从EMIFA地址0x42000000开始执行代码非AIS格式。如果FASTBOOT1则Bootloader会介入从0x42000000读取AIS格式的镜像。此时存储器的第一个字节8位设备或字16位设备必须指明数据宽度0x00代表8位0x01代表16位紧接着的3个字节保留从下一个32位字边界开始才是AIS魔数0x41504954。3. AISApplication Image Script格式精解AIS是TI为其Bootloader设计的一种紧凑的、命令驱动的脚本格式。它不仅仅是一个二进制镜像的容器更是一个可以执行初始化操作的“微型脚本引擎”。理解AIS的每个命令是进行高级启动配置的关键。3.1 AIS整体结构与魔数一个完整的AIS数据流始于一个32位的魔数Magic Number0x41504954ASCII对应“AIP T”。Bootloader在接收到这个魔数后才会开始解析后续的命令流。AIS命令流由一系列命令组成最终必须以一个JUMP_CLOSE命令结束该命令指示了应用程序的入口地址。3.2 核心AIS命令详解每个AIS命令由一个32位的操作码Opcode和可选的数据参数构成。以下是几个最核心的命令3.2.1 SET命令 (Opcode: 0x58535907)SET命令用于在加载应用程序之前配置DSP的内部寄存器例如PLL、DDR控制器、EMIF等。这对于在高速FASTBOOT模式下正确初始化外部内存至关重要。其格式为0x58535907 (SET Opcode) TYPE // 数据类型和位域信息 ADDRESS // 要写入的寄存器地址 DATA // 要写入的数据 SLEEP // 写入后的延时CPU周期数TYPE字段非常强大它不仅可以指定写入8位、16位或32位数据还可以指定只写入某个寄存器的特定位域Field/Bits。例如TYPE值为0x04010008表示数据类型为“域”4起始位是8结束位是16。Bootloader会先读取ADDRESS处的值修改指定比特位再写回。3.2.2 SECTION_LOAD命令 (Opcode: 0x58535901)这是加载应用程序代码和数据的主要命令。格式如下0x58535901 (SECTION_LOAD Opcode) ADDRESS // 目标加载地址如 0x10800000 SIZE // 要加载的字节数 DATA0 // 数据字0 DATA1 // 数据字1 ... DATAn // 数据字nBootloader会连续读取SIZE字节的数据并将其写入从ADDRESS开始的内存中。通常一个应用程序的.text代码段和.data已初始化数据段会各对应一个SECTION_LOAD命令。3.2.3 SECTION_FILL命令 (Opcode: 0x5853590A)用于将某段内存区域填充为固定模式常用于初始化.bss段清零或设置特定内存模式。格式类似于SECTION_LOAD但用PATTERN代替了数据流。3.2.4 JUMP_CLOSE命令 (Opcode: 0x58535906)AIS脚本的终止符。它告诉Bootloader“所有代码和数据已加载完毕现在请跳转到指定地址开始执行应用程序并且我的任务结束了。” 其格式为0x58535906 (JUMP_CLOSE Opcode) ENTRY_POINT // 应用程序入口地址如 0x10800000 SECTION_COUNT // 本次启动应加载的总段数 BYTE_COUNT // 本次启动应加载的总字节数后两个参数用于Bootloader进行完整性校验。3.2.5 函数执行命令 (Opcode: 0x5853590D)这是一个高级功能允许你调用Bootloader ROM中预置的初始化函数。目前支持三个函数PLL配置函数索引03个参数PLL倍频器、CPU分频、时钟源。EMIFA配置函数索引15个参数AB1CR, AB2CR, AB3CR, AB4CR, NANDFCR 控制寄存器值。DDR内存控制器配置函数索引29个参数DDR PLL配置、各种时序参数。使用函数执行命令比用多个SET命令更简洁且这些函数可能包含必要的延时和状态检查。例如配置PLL和DDR的命令序列如下所示0x5853590D // 函数执行命令 0x00030000 // 3个参数函数索引0PLL配置 0x00000015 // PLLM 21 (PLL倍频为22) 0x00000001 // PLLDIV1 1 (CPU时钟2分频) 0x00000000 // 时钟源 0 (内部) 0x5853590D // 函数执行命令 0x00090002 // 9个参数函数索引2DDR配置 0x00000017 // DDR PLLM 0x00000001 // DDR CLK DIV ... (后续DDR控制器寄存器值)3.3 CRC校验机制为了保证在传输过程中尤其是UART、I2C等易受干扰的接口加载数据的正确性AIS支持CRC-32校验。ENABLE_CRC(0x58535903)和REQUEST_CRC(0x58535902)命令配合使用。分段CRC在每个SECTION_LOAD或SECTION_FILL命令后紧跟一个REQUEST_CRC命令并附上该段数据的预期CRC值。Bootloader计算该段的CRC计算范围包括段地址、段大小和段数据本身并进行比对。如果失败Bootloader会通过BOOTCMPLT寄存器报告错误并根据REQUEST_CRC命令中提供的“负向指针”回退到上一个检查点重新加载。整体CRC在所有段加载完毕后进行一次总的CRC校验。 CRC生成算法使用多项式0x04C11DB7。在生成AIS文件时genAIS工具可以自动计算并插入CRC命令和值。4. 使用genAIS工具生成AIS镜像TI提供了Perl脚本工具genAIS.pl用于将链接后的可执行文件.out转换成特定启动模式所需的AIS格式文件。这是将你的应用程序部署到Flash或EEPROM的关键一步。4.1 基本命令与参数一个典型的命令如下genAIS.pl -i my_app.out -o my_app_spi.ais -bootmode spi -otype ascii -addrsz 16 -crc 1-i指定输入的.out文件。-o指定输出的AIS文件。-bootmode指定启动模式spi,i2c,uart,nand,emifa,raw等。raw模式生成与启动方式无关的通用AIS。-otype输出文件格式。ascii是十六进制文本便于查看和通过UART发送binary是纯二进制适合直接烧录到Flashasm生成汇编.word伪指令文件可再次汇编链接。-addrsz对于SPI模式指定EEPROM的地址宽度16或24位。-memwidth对于I2C/SPI指定存储器数据宽度DM643x的I2C只支持16位。-datawidth对于EMIFA FASTBOOT指定Flash的数据宽度8或16位。注意这不能替代硬件上EMIF_8_16引脚的正确设置。-crcCRC选项。0为无CRC1为分段CRC2为整体CRC。-cfg指定一个配置文件该文件包含一系列要在AIS镜像最前面执行的SET或函数执行命令。这个功能极其重要用于在加载应用程序前初始化PLL、EMIF、DDR等关键外设。4.2 配置文件-cfg的编写与使用配置文件是一个纯文本文件里面直接写入要嵌入AIS开头的命令序列通常用于外设初始化。例如一个名为init_ddr.cfg的配置文件可能包含# 初始化PLL倍频到22倍CPU分频为2 0x5853590D # 函数执行命令 0x00030000 # 3个参数函数索引0 (PLL配置) 0x00000015 # PLLM 21 (0x15)即倍频22 0x00000001 # PLLDIV1 1 (2分频) 0x00000000 # 时钟源内部 # 初始化EMIFA 0x5853590D # 函数执行命令 0x00050001 # 5个参数函数索引1 (EMIFA配置) 0x3FFFFFFC # AB1CR 值 0x3FFFFFFC # AB2CR 值 0x3FFFFFFC # AB3CR 值 0x3FFFFFFC # AB4CR 值 0x00000000 # NANDFCR 值 # 初始化DDR2内存控制器 0x5853590D # 函数执行命令 0x00090002 # 9个参数函数索引2 (DDR配置) 0x00000017 # DDR PLLM 0x00000001 # DDR CLK DIV 0x0000000B # VPBE CLK DIV 0x00000000 # PLL SRC (内部) 0x50006405 # DDRPHYCR 控制寄存器 0x00138822 # SDBCR (SDRAM配置寄存器) 0x16492148 # SDTIMR (SDRAM定时器0) 0x000CC702 # SDTIMR2 (SDRAM定时器1) 0x000004EF # SDRCR (SDRAM刷新控制)然后在genAIS命令中加上-cfg init_ddr.cfg这些初始化命令就会出现在AIS魔数之后、你的应用程序段加载命令之前。Bootloader会首先执行这些配置确保当它开始将代码加载到DDR内存时DDR控制器已经正确初始化。4.3 依赖与注意事项genAIS工具内部会调用TI的ofd6xObject File Display工具来解析.out文件。你需要确保Code Generation ToolsCGT已正确安装并且ofd6x的版本在v6.1.0A06333或以上。在某些Windows系统上如果Perl的system()函数调用失败你需要手动运行ofd6x生成XML中间文件再提供给genAISofd6x -x --obj_displaynone,header,optheader,sections,symbols my_app.out -o my_app.xml genAIS.pl -i my_app.out -x my_app.xml -o my_app.ais -bootmode uart -otype txt5. 各启动模式下的AIS镜像实例分析理解AIS的抽象格式后我们结合具体启动模式来看其物理存储布局。这能帮你更好地调试和验证烧录到存储器的数据是否正确。5.1 SPI启动镜像布局对于SPI启动AIS镜像的第一个32位字必须包含EEPROM的地址宽度以字节为单位。对于16位地址的SPI EEPROM该值为0x00000002对于24位地址则为0x00000003。这个字必须存储在EEPROM的地址0处。紧接着从地址4开始才是AIS魔数0x41504954。在二进制烧录文件中你需要特别注意字节序Endianness。Bootloader期望数据按照小端字节序Little-Endian存储在存储器中。例如AIS魔数0x41504954在内存中表示为54 49 50 41在SPI EEPROM中的存储顺序从低地址到高地址应该是字节地址字节0字节1字节2字节3解释0x00000x020x000x000x00地址宽度2字节0x00040x540x490x500x41AIS魔数0x415049540x00080x030x590x530x58启用CRC命令0x58535903..................当你使用编程器将.ais二进制文件烧录到SPI Flash时通常编程器软件会处理字节序。但如果你是自己编写程序通过DSP的SPI接口来写入EEPROM就必须确保按上述字节顺序写入。5.2 I2C启动镜像布局I2C启动的AIS格式与SPI非常相似但第一个32位字是保留的通常填充0x00000002但Bootloader会忽略它从第二个字EEPROM地址0x04开始才是AIS魔数。I2C EEPROM的数据也要求是小端字节序。5.3 UART启动数据传输流程UART启动是交互式的。流程如下DSP上电Bootloader配置UART115200, 8N1。DSP主动发送字符串BOOT ME给主机。主机收到后开始以ASCII字符形式十六进制数字的字符表示发送AIS数据流字符间不能有任何空格或换行。例如要发送魔数0x41504954主机需要依次发送四个字节4,1,5,0,4,9,5,4即字符串41504954。Bootloader会将其转换回二进制值0x41504954。主机持续发送所有AIS命令和数据。当Bootloader接收到JUMP_CLOSE命令后它会向主机发送字符串DONE然后跳转到应用程序入口点。如果过程中发生CRC错误Bootloader会发送CORRUPT并重试。因此用于UART启动的AIS文件应使用-otype txt选项生成得到一个纯ASCII文本文件主机程序只需按顺序发送该文件中的每一个字符即可。5.4 NAND Flash启动的特殊性NAND启动的AIS数据流开头有三个特殊的预留字用于指示镜像在NAND中的物理位置0x41504954AIS魔数。0x00000000占位符表示AIS镜像跨越的页数需在烧录时填充。0x00000000占位符表示镜像起始的块号需在烧录时填充。0x00000000占位符表示镜像起始的页号需在烧录时填充。genAIS工具生成NAND AIS镜像时会为这三个位置填充0。你必须在使用编程器或DSP自身将镜像写入NAND Flash后根据实际的写入位置块号、页号和镜像大小页数手动回填这三个字段的值。如果这些值不正确Bootloader将无法找到有效的AIS魔数导致启动失败。6. 实战从编译到烧录的完整流程让我们以一个具体的例子将一段简单的汇编程序例如循环递增一个计数器通过SPI Flash启动。步骤1编写应用程序并编译链接假设你有一个简单的汇编程序start.asm定义了入口点_c_int00并链接到地址0x10800000内部RAM。使用TI的汇编器和链接器生成my_app.out。cl6x -mv6400 --abicoffabi start.asm -z -o my_app.out -heap 0x1000 -stack 0x1000 -m my_app.map步骤2创建PLL/DDR初始化配置文件根据你的硬件如DDR2芯片型号、时钟频率计算正确的寄存器值编写init_hw.cfg文件内容如第4.2节示例。步骤3使用genAIS生成AIS镜像针对16位地址、8位数据宽度的SPI EEPROM生成带分段CRC校验的二进制AIS文件。genAIS.pl -i my_app.out -o my_app_spi.bin -bootmode spi -otype binary -addrsz 16 -crc 1 -cfg init_hw.cfg步骤4烧录AIS镜像到SPI EEPROM使用专用的SPI Flash编程器或通过JTAG在DSP中运行一个烧录程序将生成的my_app_spi.bin文件烧录到SPI EEPROM的起始地址0x000000。务必确认编程器设置或烧录程序是按照小端字节序写入的。步骤5配置硬件启动模式将DM643x的BOOTMODE[3:0]引脚设置为0110bSPI 16x8启动FASTBOOT引脚根据是否需要高速启动设置AEM/PLLMS引脚根据PLL需求设置。确保SPI EEPROM的硬件连接正确见2.2.1节。步骤6上电测试与调试给系统上电。如果启动失败首先检查电源、时钟和复位信号是否正常。然后可以通过JTAG连接DSP在Bootloader运行后或启动失败后读取BOOTCMPLT寄存器的ERR字段。该字段的错误码见原文表32能提供明确的失败原因例如0x1: 收到无效AIS命令AIS文件可能损坏或烧录错位。0x2: UART模式下未收到魔数主机未及时响应或波特率不匹配。0x4: CRC校验失败数据传输或存储过程发生比特错误。0x5: SPI地址宽度无效-addrsz参数设置与EEPROM实际不符。0xD: PLL锁相失败PLL配置参数可能超出范围或不稳定。7. 高级主题与避坑指南7.1 Bootloader对内存和Cache的使用Bootloader自身需要使用一部分RAM作为栈和临时缓冲区。这部分内存位于L1D Cache的前20KB。你的应用程序链接命令文件.cmd必须避免将任何已初始化.text, .data, .cinit等的段分配到这片区域通常是0x10800000 - 0x10804FFF否则Bootloader的数据会被覆盖导致启动失败。未初始化的段如.bss, .far可以分配到这里因为它们是在Bootloader退出、应用程序开始运行后才被初始化的。此外Bootloader在启动过程中会禁用所有CacheL1P, L1D, L2。即使在AIS脚本中使用SET命令使能了CacheBootloader在跳转到应用程序前也会再次禁用它们。因此你的应用程序入口代码必须包含显式使能Cache的步骤如果你希望使用Cache来提升性能。7.2 启动操作系统如Linux/DSP/BIOSROM Bootloader本身不关心它加载的是裸机程序还是操作系统的引导程序。要启动像uClinux这样的操作系统通常采用二级引导Secondary Boot策略一级引导ROM Bootloader从SPI/I2C等介质加载一个符合AIS格式的二级引导程序如U-Boot的SPL。这个二级引导程序体积很小只包含最基本的硬件初始化。二级引导ROM Bootloader将控制权交给二级引导程序。二级引导程序再从其熟悉的格式如U-Boot的uImage中从NAND、MMC或网络加载完整的内核和文件系统并启动它们。因此你只需要确保二级引导程序的镜像被转换成AIS格式即可操作系统的核心镜像可以保持其原有格式。7.3 确定芯片上的Bootloader版本不同版本的DM643x芯片其ROM中的Bootloader版本可能不同。你可以通过JTAG读取地址0x00101A00处的值来获取版本信息0x27B2A120仅支持EMIFA直接启动不支持FASTBOOT及其他模式。0x00010200,0x00010300,0x00010400支持本文描述的所有功能包括FASTBOOT和各种启动模式。 在选型和设计时务必确认芯片的Bootloader版本符合你的需求。7.4 常见问题排查速查表现象可能原因排查步骤无法启动JTAG连接后PC停在ROM中1. 启动模式引脚配置错误。2. 外部存储器无响应或连接错误。3. AIS魔数未找到。1. 测量BOOTMODE等引脚电平与BOOTCFG寄存器值对比。2. 检查Flash/EEPROM的电源、片选、时钟和数据线。3. 用编程器读取存储器起始内容确认AIS魔数0x41504954在正确位置。CRC错误ERR0x41. 数据传输过程干扰UART/I2C。2. 存储器物理损坏或读写时序不当。3.genAIS使用的CRC选项与AIS文件中命令不匹配。1. 检查通信线路质量降低波特率UART或时钟频率I2C/SPI测试。2. 换用存储器测试。3. 确认-crc参数设置并检查AIS文件中ENABLE_CRC和REQUEST_CRC命令是否存在且顺序正确。PLL锁相失败ERR0xD1. PLL配置参数倍频、分频超出芯片或具体型号允许范围。2. 外部晶振或时钟输入不稳定。1. 查阅芯片数据手册确认PLL倍频器PLLM和输出频率范围。2. 检查时钟源电路测量CLKIN引脚波形。应用程序跑飞或硬件异常1. 应用程序链接地址与AIS中加载地址不匹配。2. DDR或EMIF未正确初始化访问外部内存失败。3. Cache未正确使能/禁用导致数据一致性错误。1. 核对链接命令文件(.cmd)中的内存区域定义与AIS加载地址。2. 确保在AIS开头通过-cfg文件正确初始化了DDR/EMIF控制器时序参数与你的内存芯片匹配。3. 在应用程序开头添加Cache使能代码CSL库函数或直接写寄存器。UART启动时主机收不到“BOOT ME”1. 串口线连接错误TX/RX反接。2. 波特率、数据位、停止位设置与Bootloader固定115200 8N1不匹配。3. 硬件流控引脚影响如果模式为1000b却连接了RTS/CTS。1. 交叉TX/RX线再试。2. 确认主机串口工具设置为115200, 8N1。3. 尝试不使用硬件流控的模式BOOTMODE1000b或将RTS/CTS引脚正确连接/上拉。掌握TMS320DM643x的Bootloader与AIS格式意味着你掌握了让这颗强大DSP“苏醒”的钥匙。从理解启动引脚配置到深入AIS命令集的每一个细节再到熟练使用genAIS工具和应对各种启动故障这个过程需要耐心和实践。建议你从最简单的UART启动开始实验因为它便于观察和调试数据流然后再逐步挑战SPI、I2C等需要预先烧录存储器的模式。记住仔细阅读芯片勘误表和数据手册严格计算硬件时序参数并充分利用BOOTCMPLT寄存器的错误信息是解决复杂启动问题的关键。当你成功地从一片空白的Flash中引导起自己的系统时这份对底层机制的掌控感将是嵌入式开发中最有价值的回报之一。