灞波儿奔

  • 2019-01-10
  • 发表了主题帖: DSP2833x增加代码跳转文件

    同时我们还需要在原有的调试程序项目中添加跳转代码文件DSP2833x_CodeStartBranch.asm,在处理器完成引导后跳转到用户应用过程入口。 同一芯片对应的DSP2833x_CodeStartBranch.asm文件也相同,因此我们可以从其他例程中拷贝或者自己添加该文件,文件内容如下: 注意:以下内容只试用于TMS320F28335! ;// TI File $Revision: /main/1 $ ;// Checkin $Date: August 18, 2006   13:45:55 $ ;//########################################################################### ;// ;// FILE:  DSP2833x_CodeStartBranch.asm ;// ;// TITLE: Branch for redirecting code execution after boot. ;// ;// For these examples, code_start is the first code that is executed after ;// exiting the boot ROM code. ;// ;// The codestart section in the linker cmd file is used to physically place ;// this code at the correct memory location.  This section should be placed ;// at the location the BOOT ROM will re-direct the code to.  For example, ;// for boot to FLASH this code will be located at 0x3f7ff6. ;// ;// In addition, the example DSP2833x projects are setup such that the codegen ;// entry point is also set to the code_start label.  This is done by linker ;// option -e in the project build options.  When the debugger loads the code, ;// it will automatically set the PC to the "entry point" address indicated by ;// the -e linker option.  In this case the debugger is simply assigning the PC, ;// it is not the same as a full reset of the device. ;// ;// The compiler may warn that the entry point for the project is other then ;//  _c_init00.  _c_init00 is the C environment setup and is run before ;// main() is entered. The code_start code will re-direct the execution ;// to _c_init00 and thus there is no worry and this warning can be ignored. ;// ;//########################################################################### ;// $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $ ;// $Release Date: August 4, 2009 $ ;//########################################################################### *********************************************************************** WD_DISABLE  .set    1       ;set to 1 to disable WD, else set to 0     .ref _c_int00     .global code_start *********************************************************************** * Function: codestart section * * Description: Branch to code starting point ***********************************************************************     .sect "codestart" code_start:     .if WD_DISABLE == 1          LB wd_disable       ;Branch to watchdog disable code     .else         LB _c_int00         ;Branch to start of boot.asm in RTS library     .endif ;end codestart section *********************************************************************** * Function: wd_disable * * Description: Disables the watchdog timer ***********************************************************************     .if WD_DISABLE == 1     .text wd_disable:     SETC OBJMODE        ;Set OBJMODE for 28x object code     EALLOW              ;Enable EALLOW protected register access     MOVZ DP, #7029h>>6  ;Set data page for WDCR register     MOV @7029h, #0068h  ;Set WDDIS bit in WDCR to disable WD     EDIS                ;Disable EALLOW protected register access     LB _c_int00         ;Branch to start of boot.asm in RTS library     .endif ;end wd_disable     .end ;//=========================================================================== ;// End of file. ;//===========================================================================

  • 发表了主题帖: TMS320F28335项目开发记录11_28335之存储系统

    TMS320F28335片上有256K×16位的FLASH,34K×16位的SRAM,8K×16位的BOOT ROM,2K×16位的OPT ROM。 1、 TMS320F28335片上SARAM TMS320F28335片内共有34K×16位单周期单次访问随机存储器的SARAM,分成10个块,他们分别称为M0、M1、L0-L7。 MO和M1块SARAM的大小均为1K×16位,当复位后,堆栈指针指向M1块的起始地址,堆栈指针向上生长。M0和M1段都可以映射到程序区和数据区。 L0-L7块SARAM的大小均为4K×16位,既可映射到程序空间,也可映射到数据空间,其中L0-L3可映射到两块不同的地址空间并且受片上的FLASH中的密码保护,以免存在上面的程序或数据,被他人非法拷贝。 2、 TMS320F28335片上FLASH和OTP     TMS320F28335片上有256K×16位嵌入式FLASH存储器和1K×16位一次可编程EEPROM存储器,他们均受片上FLASH中的密码保护。FLASH存储器由8个32K×16位扇区组成,用户可以对其中任何一个扇区进行擦除、编程和校验,而其他扇区不变。但是,不能在其中一个扇区上执行程序来擦除和编程其他的扇区。(表示质疑,可以使用28335提供的Flash API函数进行在线的编程烧写Flash) 3、 TMS320F28335外部存储器接口    TMS320F28335的外部存储器接口包括:20位地址线,16(最大32)位数据线,3个片选控制线及读写控制线。这3个片选线映射到3个存储区域,Zone0,Zone6和Zone7。这3个存储器可分别设置不同的等待周期。 Zone0  存储区域:    0X004000—0X004FFF, 4K×16位   可编程最少一个等待周期 Zone6  存储区域:    0X100000—0X1FFFFF, 1M×16位  10ns   最少一个等待周期 Zone7  存储区域:    0X200000—0X2FFFFF, 1M×16位  70ns   最少一个等待周期

  • 发表了主题帖: 28335的存储器空间

    28335的存储器空间

  • 发表了主题帖: DSP2812串口波特率正确和良好的设计方法

    1.宏定义 //以下定义来自windows里的winbase.h并改造 #define CBR_110             11E1 #define CBR_300             3E2 #define CBR_600             6E2 #define CBR_1200            12E2 #define CBR_2400            24E2 #define CBR_4800            48E2 #define CBR_9600            96E2 #define CBR_14400           144E2 #define CBR_19200           192E2 #define CBR_38400           384E2 #define CBR_56000           56E3 #define CBR_57600           576E2 #define CBR_115200          1152E2 #define CBR_128000          128E3 #define CBR_256000          256E3 #define CPU_FREQ     150E6 #define LSPCLK_FREQ  CPU_FREQ/4 #define SCI_FREQ     CBR_38400//波特率38400 #define SCI_PRD     (LSPCLK_FREQ/(SCI_FREQ*8))-1//此法在头文件中应用时不清晰 //以下由菜农改编 #define SCI_BAUD(baud) (LSPCLK_FREQ/(baud*8))-1 2.设置波特率           SciaRegs.SCIHBAUD = 0x0000;           SciaRegs.SCILBAUD = SCI_PRD;//实际的BaudRate在头文件中 //或    SciaRegs.SCILBAUD = SCI_BAUD(CBR_38400);//此法较清晰,BaudRate=38400

  • 发表了主题帖: TMS320F28335 串口 SCI

    TMS320F28335的串口有三个串口,SCIA,SCIB和SCIC,GPIO的管脚对应如下: SCIA对应GPIO28/29和GPIO35/36两组可选,SCIB有四组管脚可以选择,分别是GPIO9/11,GPIO14/15,GPIO18/19,GPIO22/23,SCIC对应的是GPIO62/63。 首先需要定义管脚。 void InitSciaGpio()    //初始化GPIO管脚 {    EALLOW; //根据硬件设计决定采用GPIO28/29和GPIO35/36中的哪一组。这里以35/36为例 //定义管脚为上拉     GpioCtrlRegs.GPBPUD.bit.GPIO36 = 0;        GpioCtrlRegs.GPBPUD.bit.GPIO35 = 0;    //定义管脚为异步输入     GpioCtrlRegs.GPBQSEL1.bit.GPIO36 = 3; //配置管脚为SCI功能管脚     GpioCtrlRegs.GPBMUX1.bit.GPIO36 = 1;     GpioCtrlRegs.GPBMUX1.bit.GPIO35 = 1;        EDIS; } SCIB和SCIC的配置差不多。 下来就要定义波特率等等了。例子是9600bps,1,8,n,1. void scia_init() {     SciaRegs.SCICCR.all =0x0007;   // 1 stop bit, No loopback                                    // No parity,8 char bits,                                    // async mode, idle-line protocol     SciaRegs.SCICTL1.all =0x0003; // enable TX, RX, internal SCICLK,                                    // Disable RX ERR, SLEEP, TXWAKE     SciaRegs.SCICTL2.bit.TXINTENA =1; //发送中断使能     SciaRegs.SCICTL2.bit.RXBKINTENA =1;//接收中断使能     SciaRegs.SCIHBAUD    =0x0001; // 9600 baud @LSPCLK = 37.5MHz.     SciaRegs.SCILBAUD    =0x00E7;     SciaRegs.SCICTL1.all =0x0023; // Relinquish SCI from Reset } 接着进行中断的配置    EALLOW;    // This is needed to write to EALLOW protected registers    PieVectTable.SCIRXINTA = &sciaRxIsr;    PieVectTable.SCITXINTA = &sciaTxIsr;    PieVectTable.SCIRXINTB = &scibRxIsr;    PieVectTable.SCITXINTB = &scibTxIsr;    EDIS;   // This is needed to disable write to EALLOW protected registers 上面是将SCIA和SCIB的中断服务程序连到PIE的中断表中,发生中断就会跑到你的ISR去了 下面就是开中断了。    PieCtrlRegs.PIECTRL.bit.ENPIE = 1;   // Enable the PIEblock    PieCtrlRegs.PIEIER9.bit.INTx1=1;     // PIEGroup 9, int1    PieCtrlRegs.PIEIER9.bit.INTx2=1;     // PIEGroup 9, INT2    PieCtrlRegs.PIEIER9.bit.INTx3=1;     // PIEGroup 9, INT3    PieCtrlRegs.PIEIER9.bit.INTx4=1;     // PIEGroup 9, INT4    IER = 0x100;    // Enable CPU INT    EINT; 。。。。串口OK了  

  • 2019-01-09
  • 发表了主题帖: 利用MCU实现语音识别?

    在万物互联的世界中,越来越多能够理解语音内容的电子设备逐渐进入我们的视线。在智能手机、平板电脑和笔记本等拥有Siri或Cortana应用程序的设备中,语音识别能够帮助用户搜索答案或控制周围的电子器件等。虽然这些应用程序让人眼前一亮,但是它们却占用了大量的处理能力和内存。所以,人们对于微控制器(MCU)因过小而无法识别语音的误解也就不足为奇了。https://e2echina.ti.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/7357.2022.Speech-recognizer-demo_5F00_2.jpg_2D00_300x0.jpg没错,MCU的低功耗和小尺寸设计虽然使它不足以理解全部语音内容,不过对于小型低功耗的嵌入式应用而言,也许只需识别几个定义明确的短语就大功告成了,例如“给我的咖啡加热”或“关灯”等。最近,德州仪器(TI)在CES上所展示的低功耗MSP432™ MCU上演示了这个功能。TI还发布了一个用C语言代码编写的语音识别器库,这个库使得基于MSP432 MCU的应用能够识别用户个人经常使用的语音短语,在忽略其它语音内容的情况下可识别的短语多达11个。虽然用户在设置时必须重复几遍希望被识别的短语,不过一旦这一步成功完成,后面就可以顺利使用了。这个语音识别器库具有很多令人期待的功能,例如:用户可以随时更改自己的短语用户可以设定识别器只对少数几个短语做出响应当然,用户也可以根据个人需要将短语库中某些短语进行删除 此外,连同语音识别库一起提供的还有一些易于使用的头文件和用户与API指南,以帮助用户快速上手。下载内容还包括针对MSP432 MCU LaunchPad™ 开发套件、Audio BoosterPack™ 插入式模块以及Sharp或Kentec LCD BoosterPack套件的示例演示程序。https://e2echina.ti.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/3480.2016_2D00_11_2D00_29_5F00_093717.png 这个演示应用通过MSP432 MCU内集成的14位模数转换器(ADC14)来收集语音,以及用于显示菜单的液晶显示屏(LCD)。这个菜单能够成功运行识别功能,用户可以选择:首先说出一个希望识别器记住的短语。识别器将生成一个针对这个语音的模型,并将其存储在闪存中(一个被称为注册的任务)。再说一次已注册的短语。识别器将用它来制作一个更好的模型,以提升性能(一个被称为更新的任务)。删除被注册的第一个模型运行识别功能

  • 发表了主题帖: 构建可由电池供电运行数十年的楼宇自动化系统

    凭借业界领先的低功耗MSP微控制器,德州仪器(TI)一直致力于帮助工程师解决开发和构建楼宇自动化应用的各种难题。TI的MSP MCU不仅拥有极低的功耗,还具备实现小型化的高度模拟集成,同时包含了参考软件和行业标准通信协议。那么,这些优势和特性对于楼宇自动化的设计究竟意味着什么呢?低功耗利用MSP MCU,工程师无须牺牲楼宇自动化系统中的功能性,或者是对电池充电。通过将低功耗设计技术与能量采集(Energy Harvesting)相结合,可以减少或避免在成千上万个远程传感器中更换电池。在必须更换电池或者电力流失的情况下,由于FRAM和Compute Through Power Loss(CTPL)软件设施所具有的速度和耐久性,系统状态得以保持。事实上,应用可以立即在中断的地方重新连接,无需再次校准或硬启动。借助EnergyTrace™ 技术所具有的实时功耗分布能力,经优化的MSP微控制器可以充分利用应用的全部电量。智能模拟集成和小型化许多人也许并不了解“MSP”的真正含义,这个命名其实代表的是“混合信号处理器”。TI的主要目标之一就是将模拟外设进行集成,以降低楼宇自动化系统的复杂度,减少尺寸和成本。集成的高性能模拟功能能够允许工程师将本地接口连通性添加到楼宇自动化系统中的各个传感器里,进而实现采样和处理等功能。https://e2echina.ti.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/4212.1.jpg参考软件与连通性协议无论是将有线还是无线的连通性添加到楼宇自动化系统中,MSP MCU硬件和软件都能使器件像主机控制器一样运行,同时与多个连通性解决方案进行无缝对接。TI还提供TI Design参考设计、有线和无线堆栈与算法,包括近期发布的CTPL和IQMathLib库,以加快开发速度并减少所需的连通性(RF)专业知识。下面我们将列举一些最常见的楼宇自动化应用,看看低功耗MSP MCU如何满足它们的设计需要。占用传感器和运动检测器从本质上而言是感测应用,包括一系列用于检测固定区域内人员数量的技术,通常情况下,这种检测是自动的,被检测人并不知晓。诸如应用在办公室、教室、会议室、卫生间、储藏室或走廊等区域的红外(IR)、超声波、声音和图像识别等感测技术。这些传感器或检测器可以用来保存和节省电节能,同时还有助于添加智能性和数据分析,以改进建筑物内的安保状况。MSP MCU可为占用传感器应用提供以下优势:针对更简单电源的低功耗针对尺寸受限应用的小型化尺寸针对被动红外 (PIR)、热电偶、电感、超声波等多个传感器输入的集成型智能模拟功能。例如,MSP432 MCU上的14位高速ADC可用于高级捕捉算法,并提高性能针对增强型系统安全的AES256和IP封装针对固件升级和数据记录的非易失性嵌入式FRAM 此外,MSP MCU还支持6LoWPAN,SimpleLink™、KNX等多个通信堆栈。电子锁(e-lock) 是一个可由钥匙、门卡、数字键盘、指纹、RFID卡、安全令牌等实体提供保密信息或是组合而开启的机械和电子闭合设备。这类产品主要用来帮助提高安全性,以确保对特定区域的合法进入。MSP MCU可为e-Lock应用提供以下优势:可由电池供电运行10年以上的超低功耗针对增强型安全性和IP保护的AES256和IP封装针对固件升级和数据记录的非易失性嵌入式FRAM支持多个通信堆栈,其中包括近场通信(NFC)、6LoWPAN、具有Bluetooth® Low Energy (BLE) 和Wi-Fi® 的SimpleLink等 玻璃破裂检测器是一个能够检测一扇窗户是否破碎或损坏的检测器,通常用于电子防盗警报器等应用中。玻璃破裂检测器一般通过麦克风来监测来自玻璃的噪声或振动,如果这些振动超过了特定的阈值,那么检测器电路就对这些振动进行分析。MSP MCU可为玻璃破裂检测器应用提供以下优势:可由电池供电运行10年以上的超低功耗参考设计和软件,具有针对错误触发或监测的鲁棒算法由AES256实现的更高安全性,针对IP保护的局部安全区,以及固件升级针对高级捕捉算法和更高性能的低功耗14位高速ADC

  • 发表了主题帖: 电容触摸按键在电梯行业的创新应用

    在电梯行业,轿箱内的操纵箱控制面板以及每层楼安装的外呼板上都会用到按键开关,该按键要求具有高可靠性、抗干扰、长寿命和易用美观的特点。目前大部分使用的都是机械式按键。https://e2echina.ti.com/resized-image/__size/1230x300/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/2018_2D00_03_2D00_29_5F00_161324.png传统机械式按键通过微动开关和机械结构来实现按键功能,当按键被按下时触发微动开关输出信号给主板,当按键被释放时通过内部弹簧和机械机构实现回弹。传统机械式按键其成本很大一部分是花在模具上,所以如果要更改按键外观,比如外观形状(圆形,方形或者长条形)尺寸大小,按键附加功能,机械式按键就力不从心了,而使用电容式触摸按键就非常简单,电容触摸按键可以让按键设计的更加时尚、友好和个性化。https://e2echina.ti.com/resized-image/__size/400x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/2018_2D00_03_2D00_29_5F00_161353.png电容触摸按键,相对于传统机械按键,具有以下优点:节省结构开模费用,当按键要求不同尺寸、形状,个性化定制的时候,机械式按键往往需要重新开模,大部分费用花在模具上。而电容按键只需要更改前面板,结构模具不需要做改动。如下图,比如圆形和方形按键,只需要改前面板,后面的模具结构不需要做变动,费用大大降低,时间也大为缩短。 https://e2echina.ti.com/resized-image/__size/400x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/2018_2D00_03_2D00_29_5F00_161409.png寿命长,电容按键里面没有机械和弹簧结构,只有前面亚克力面板,不存在机械疲劳性损伤,可以有效避免卡键风险。而机械按键通常都会有按键寿命限制,比如300百万次。外观更时尚,电容按键因为其使用的是MCU,可以发挥其灵活设计的特点,写代码实现更多功能,比如驱动LED做背光灯,做不同颜色的背光,实现按键呼吸灯效果等。加蜂鸣器和振动功能,当有按键按下的时候,给用户以蜂鸣振动作反馈,用户体验会更好。 https://e2echina.ti.com/resized-image/__size/400x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/2018_2D00_03_2D00_29_5F00_161905.png            电容按键参考设计框图如上图所示, MSP430FR2512是TI 最新量产的低成本支持触摸功能的单片机,支持:4 通道自感或互感按键7.5K FRAM+ 2K RAM5 mm × 4.4 mm TSSOP16 脚封装和4.5 mm × 3.5 mm VQFN20 封装11 GPIO 主板供电24V, 通过LMR14006降压到3.3V给MCU供电,4-40V输入,最大600mA电流,待机28 μA,Shutdown模式1 μA。通过配套的图形化设计软件Captivate Design Center,工程师可以在5分钟之内方便快速地实现电容触摸按键的设计并完成基本调试。https://e2echina.ti.com/resized-image/__size/500x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/0329asassas.png使用电容触摸方案同样可以通过电梯行业对按键的测试要求:静电测试脉冲群测试盐雾测试温湿度测试高低温冲击测试防水EMI 其他资源:基于MSP430FR2633 的TIDM-CAPTOUCHEMCRE的EVM评估板可以通过下面测试IEC 61000-4-6 conducted noise tolerance up to 10VrmsIEC 61000-4-4 electrical fast transient/burst tolerance up to ±4kVIEC 61000-4-2 electrostatic discharge tolerance up to ±8kV contact discharge and ±15kV air discharge Enabling noise-tolerant capacitive-touch HMIs with MSP CapTIvate™ technology: http://www.ti.com/lit/wp/slay045a/slay045a.pdfTIDM-CAPTOUCHEMCRE: http://www.ti.com/tool/tidm-captouchemcref 触摸芯片产品主页: http://www.ti.com/microcontrollers/msp430-ultra-low-power-mcus/capacitive-sensing-mcus/overview.html 电容触摸MCU 培训视频:  https://training.ti.com/captivate-training-series 图形化设计软件:http://www.ti.com/tool/MSPCAPTDSNCTR

  • 发表了主题帖: MSP430G2755 Main Memory Bootloader UART 移植指导

          TI 的MSP430支持在主程序中加载Bootloader的方式进行在线升级操作,通过在线升级功能,客户可以通过外部处理器随时更新MSP430内部的程序及Bug 的远程修复。同时TI也提供了基于MSP430G2553的参考代码,本文详细的介绍了如何将MSP430G2553的Bootloader移植到MSP430G2755中,使用MSP 430G2553 Host对MSP430G2755 Device进行的升级操作。1. MSP430 Main Memory Bootloader 介绍       在MSP430G2xx 中实际上具有一个ROM版本的BSL(Bootloader) ,但是这个BSL仅仅支持外部MCU通过UART进行在线升级,而且而且所有的协议全部固化,无法进行修改或者更改其他接口方式进行升级操作。所以这个需要一个可以在主程序中运行的Bootloader,可以让外部MCU进行用户自定义的升级操作。同时TI也提供了一个基于MSP430G2553的参考例程,可以通过如下链接进行下载。http://software-dl.ti.com/msp430 ... test/index_FDS.html本文使用的参考代码版本为MSPBoot_1_01_00_00,下图为MSPBoot的整个软件框架。https://e2echina.ti.com/resized-image/__size/600x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/8863.B1.png图1 MSPBoot软件框架2. MSPBoot的代码移植流程       2.1 MS430G2755 CMD 文件的产生           首先用Per工具产生CMD文件(Generating Linker Files), 通过Per的工具会产生两个CMD文件,其中一个给MSP430G2755的Bootloader使用,另一个给MSP430G2755的应用程序使用。操作指令如下,C:\Users\a0223791\Desktop\MSP430-BSL-IAP\MSPBoot_1_01_00_00\linkerGen>perl MSPBootLinkerGen.pl -file lnk_msp430G2755_Uart_1KB -dev MSP430G2755 -params 0x8000 0xFFE0 0xFC00 48 6 0x1100 0x20FF 0x80 0x1000 0x10BFhttps://e2echina.ti.com/resized-image/__size/1230x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/2018_2D00_11_2D00_27_5F00_161819.png这里面有几个重要的参数说明如下,<0x8000 > = Start address of Flash/FRAM对于MSP430G2553 地址为0xC000 ,而MSP430G2755的地址需要修改为0x8000 <0xFFE0 > = Address of interrupt vector table中断向量表的地址0xFFE0,对于MSP430G2553和MSP430G2755相同 <0xFC00> = Start address of BootloaderBootloader的起始地址0xFC00,对于两者也是相同的 <48 > =Size of the proxy table这里的48对应于12个中断向量,每个中断向量占用4Byte <6> = Size of shared vectors在应用程序中一共有3个(P1/Time/Dummy)中断向量,每个中断向量占用2Byte, 对应参数为6 <0x1100> = Start address of RAMRAM的起始地址也需要修改为MSP430G2755的0x1100 <0x20FF > = End address of RAMRAM的结束地址也需要修改为MSP430G2755的0x20FF <0x80> = Size of the stackMSP430G2755默认的堆栈大小为0x80 <0x1000> = Start address of info memory used for bootloaderInformation的起始和结束地址MSP430G2553和MSP430G2755一致,无需修改 <0x10BF > = End address of info memory used for bootloaderInformation的起始和结束地址MSP430G2553和MSP430G2755一致,无需修改 注意如上修改的参数6,及中断向量的数量,在Bootloader中的中断向量不需要修改,只修改MSP430G2755应用程序App中的中断向量即可,通过下图可以直观看到中断向量的在Bin文件中的分布。https://e2echina.ti.com/resized-image/__size/600x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/3821.B2.png图二 MSP430G2755中断向量https://e2echina.ti.com/resized-image/__size/1230x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/7723.B3.png图三 MSP430G2755 Bin文件对应虚拟中断向量表           注意在这里的809C 和80E2 就对应MSP430G2755应用程序中的P1_Isr 和Timer_A,GPIO中断和定时器中断。下图会看到在MSP430G2755Bootloader中虚拟中断向量表的分布。https://e2echina.ti.com/resized-image/__size/600x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/6710.B4.png图四MSP430G2755 Bootloader虚拟中断向量表 2.2 工程CMD文件添加       将2.1步骤中产生的CMD文件,分别添加到MSP430G2755的Bootloader及应用程序App的工程中,如下图所示https://e2echina.ti.com/resized-image/__size/1230x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/2018_2D00_11_2D00_27_5F00_161903.png图5 MSP540G2755 CMD文件         特别注意,如果使用的是TI默认的MSP430G2553的工程,需要将原工程的器件型号选择为MSP430G2755,并且把MSP430G2755自带的G2553的CMD文件删除掉,使用生成MSP430G2755的CMD文件。2.3 应用程序txt转化c文件通过CCS编译器,编译MSP430G2755的应用程序,编译完成后会产生一个txt文件下载格式,我们需要将这个产生的txt文件转换为.c文件,这个.c文件才能给主控MCU使用,通过Bootloader下载到MSP430G2755中。转化运行指令如下,C:\Users\ a0223791\Desktop\MSP430-BSL-IAP\G2755_Porting\MSPBoot_1_01_00_00\430txt_converter>430txt2C.pl App1_MSPBoot.txt AppForHostG2755.c App1https://e2echina.ti.com/resized-image/__size/1230x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/2018_2D00_11_2D00_27_5F00_161916.png通过这步将生成的.c文件,添加到主MCU中的main函数文件路径中,在这里我们测试的主控MCU是MSP430G2553,添加后的程序如下图所示。https://e2echina.ti.com/resized-image/__size/600x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/6403.B6.png图六 Host MCU添加升级程序2.4 写入CRC校验地址信息通过上步我们在主控MSP430G2553中添加了需要升级的应用程序,同时我们还要在主MCU中修改目标升级芯片(MSP430G2755)的CRC地址信息,修改参考如下,https://e2echina.ti.com/resized-image/__size/600x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/3731.B7.png图七 MSP430G2553添加CRC地址信息         注意此时已经不再需要MSPBoot用户指导手册中的CRC生成工具,进行CRC的校验,我们看到其实直接在主MCU中计算了CRC校验,并且把CRC的值放到指定的位置。https://e2echina.ti.com/resized-image/__size/600x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/5353.B8.png图八 MSP430G2553 计算CRC数值2.5 修改MSP430G2755应用程序在这测试了将之前MSP430G2553默认的P1.1和P1.2口UART,修改为MSP430G2755硬件P3.4和P3.5口UART接收数据的接口。实际的参考代码如下,https://e2echina.ti.com/resized-image/__size/600x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/B9.png图九 MSP430G2755 UART口修改特别注意,在MSP430G2755应用程序App中,有两个中断默认使用即P1口和定时器中断,不能直接将P1口和Timer的中断直接屏蔽掉,这样会导致Host主控MSP430G2553升级MSP430G2553成功后,MSP430G2553并未正常的启动应用程序。如果在应用程序中不需要这两个中断向量,则在第一步产生CMD文件的过程中需要修改<6> = Size of shared vectors 这个参数。 3. 小结通过以上步骤我们完成了从MSP430G2553到MSP430G2755Bootloader的移植,那我们总结MSP430G2755 Bootloader和应用程序App的整个程序架构,分析如下。我们通过工具读取了主程序移植了BootLoader的MSP430G2755的总代码,其中MSP430G2755存储Flash地址分析如下从0x8000-0x8100为应用程序从0xFBC0-0xFBF0 为虚拟的中断向量表从0xFC00-0xFFD0 为Bootloder从0xFFE0-0xFFF0 为真实的中断向量表https://e2echina.ti.com/resized-image/__size/500x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/B10.png

  • 发表了主题帖: F28004x在线调试复位后程序无法运行问题分析

        问题描述:F28004x在线调试,如果利用CCS进行reset复位后,点击run/resume程序将停留在0x3FB02A 而无法继续运行, 而需先点击restart,程序方可正常运行。原因在于F28004x在仿真状态下的引导模式(Emulation Boot)尚未配置,因而无法顺利完成引导过程,而CCS的restart功能可以屏蔽芯片的引导过程,使得程序自动跳到main()函数入口。具体分析此问题之前,有必要了解下芯片在复位后的引导过程。下面以F28004x为例介绍C2000芯片的引导过程,老版本的芯片可参考《TMS320x2803x Piccolo Boot ROM reference guide》,基本过程还是一致的。https://e2echina.ti.com/resized-image/__size/1230x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/6303.a.png图 1 脱机模式引导过程当芯片重上电或者收到复位信号时,芯片都需要执行引导程序,选择程序入口地址或者通过外设加载程序(bootloader),后续才会运行应用程序。复位后,芯片会从地址0x3FFFC0处运行复位向量,从而跳转至Boot ROM里开始执行InitBoot功能。芯片会判断当前是否连接仿真器,进入不同的引导流程,如图1和图2分别给出了芯片在脱机模式和仿真调试模式的引导过程。(1)     若芯片没有连接仿真器,系统进入脱机模式的引导过程。F28004x在出厂时默认通过引导模式选择引脚(Boot Mode Select Pin, BMPS) GPIO24和GPIO32的电平状态组合选择不同的引导模式,如表1所示。但与F2803x等老版本芯片不同,F28004x也可以支持用户自定义BMPS和引导模式,分别通过改写DCSM OTP中的 Z1-OTP-BOOTPIN-CONFIG和Z1-OTP-BOOTDEF对应的值实现自定义引导功能,支持最多3个BMPS引脚和8种引导模式。     具体过程:若Z1-OTP-BOOTPIN-CONFIG.Key=0x5A,则进入自定义引导模式,芯片根据Z1-OTP-BOOTPIN-CONFIG.BMPSx设定的BMPS引脚及其电平状态,判断要执行的引导模式(对应的引导模式通过Z1-OTP-BOOTDEF.BOOTDEFx进行设置)。否则,芯片将根据GPIO24和GPIO32的电平状态选择默认的引导模式。 (2)     若芯片没有连接仿真器,则进入仿真调试的引导模式,通过读取EMU-BOOTPIN-CONFIG和EMU_BOOTDEF的值,从而执行特定的引导模式。值得注意的是,上述的自定义模式配置在OTP中的修改是一次性的,无法再次擦写。因此,系统提供了EMU-BOOTPIN-CONFIG和EMU_BOOTDEF用于仿真模拟自定义的引导过程,用于真正修改DCSM OTP之前的参考。     具体过程:若EMU-BOOTPIN-CONFIG.Key=0x5A,则选择自定义模式进行引导过程,芯片根据EMU-BOOTPIN-CONFIG.BMPSx设定的BMPS引脚及其电平状态,判断要执行的引导模式。值得注意的是,若EMU-BOOTPIN-CONFIG.Key=0xA5,则意味着芯片可在仿真器连接的情况下,进入脱机运行模式下对应的引导过程,即根据Z1-OTP-BOOTPIN-CONFIG和Z1-OTP-BOOTDEF对应的值进行引导;该模式与F2803x在连接仿真器时将EMU_BMODE配置成GetMode() 原理一致。而如果EMU-BOOTPIN-CONFIG.Key的值没有正确配置,芯片将进入Wait Boot 模式,会处于循环等待状态而无法完成引导过程。https://e2echina.ti.com/resized-image/__size/1230x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/8561.b.png图 2 仿真(调试模式)引导过程表 1 默认引导模式https://e2echina.ti.com/resized-image/__size/800x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/0131.c.png 若芯片顺利完成引导模式,芯片会通过外设进行加载程序,或者直接跳转至引导模式对应的程序入口地址开始运行应用程序,即main()。比如,如果是boot to Flash,则跳转至地址0x80000(此时需在CMD文件中配置“codestart” section链接至对应的Flash 空间地址)。 基于以上关于F28004x芯片引导流程的介绍,再回头分析下芯片在连接仿真器进行调试时的复位问题。以C2000ware提供的LED程序为例,(C:\ti\c2000\C2000Ware_DigitalPower_SDK_1_02_00_00\c2000ware\device_support\f28004x\examples\led ),烧写程序。根据表 2给出的Boot ROM 寄存器地址,可通过在Memory Browser 窗口查看EMU_BOOTPIN_CONFIG.Key值(高8位),结果如图 3所示,即由于EMU-BOOTPIN-CONFIG.Key = 0xEE, 因此芯片将进入Wait Boot 模式,如果进行reset后直接运行,通过反汇编Disassembly 窗口可知程序停在了0x3FB02A,处于ESTOP0循环等待状态,正是在Wait Boot 的运行地址范围内(0x3FAD74 – 0x3FB0CD),如图 4所示。表 2 . Boot ROM 寄存器地址 https://e2echina.ti.com/resized-image/__size/800x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/5074.t2.pnghttps://e2echina.ti.com/resized-image/__size/1230x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/c1.png图 3 EMU_BOOTPIN_CONFIG的值https://e2echina.ti.com/resized-image/__size/1230x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/4401.d.png图 4 运行后的程序停止位置 因此,如果要实现复位后点resume直接运行,解决方法就是要正确配置仿真状态下的引导模式。以boot to flash 为例(F28004x TRM手册中的4.3.3.1), 有以下两种思路:1) 在EMU_BOOTPIN_CONFIG地址写入0x5AFFFFFF,同时在EMU_BOOTDEF_LOW地址对应的低8位写入0x03(BOOTDEF.BOOTDEF0=0x03)2) 如果芯片在单机时可正常运行,例如GPIO24和GPIO32电平都为高(默认进入boot to flash),则在EMU_BOOTPIN_CONFIG地址0xD00写入0xA5FFFFFF即可。最后,对比下老版本的F28035芯片的引导过程。如图 5所示,可知该芯片已默认配置成GET_BOOT模式(EMU_BMODE= 0x0003),进一步去判断OTP_KEY的值,该值不等于0x55AA,因此引导模式为boot to flash,经验证,芯片可顺利完成引导程序,从而执行应用程序。https://e2echina.ti.com/resized-image/__size/800x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/0207.e.png图 5 F28035 引导模式配置

  • 2019-01-08
  • 发表了主题帖: 用一个单芯片实现电感邻近度感测

    电感邻近度传感器可用于LC传感器附近金属的非接触式检测。这些电感式感测解决方案可以实现存在检测和工厂组装线上的任务计数,而不会受到油、水、污垢或尘土的非电感材料的影响。也许有一点你没有意识到,那就是超低功耗MSP430FR6989微控制器 (MCU) 包含一个集成式扩展扫描接口 (ESI) 外设(可用作模拟前端 (AFE)),以便与PCB线圈直接连接,从而实现低成本和低功耗电感邻近度感测。https://e2echina.ti.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/5102.4.jpgLC传感器通常用于与电感感测有关的应用。在用短脉冲为电容器充电后,LC传感器振荡,并且信号电压降衰减。由于金属内涡电流导致的能量吸收,金属物体会使得信号衰减得更快。这个更加快速的衰减可以实现传感器附近金属的检测。这个TI Design参考设计TIDM-INDUCTIVEPROX显示出需要在单芯片电感式邻近度感测实现方式中充分利用高级ESI外设时所需要的硬件和软件。这个解决方案能效也很高,只需要几微安的电流。在这配置中,集成式模拟前端被用来仿真LC传感器,感测信号电平,并将它们转换为数字显示。然后,这个数据被存储在一个预处理元件中,用一个处理状态机进行分析。通过将一个LC传感器与电路板底部的ESI引脚相连,可以在一个MSP-EXP430FR6989 MCU LaunchPad™ 开发套件上实现这种类型的应用。上面提到的这个TI Design参考设计显示出多个LC传感器变量,以演示对于输出信号频率和衰减率的影响。如果一个应用需要更高的分辨率(也就是确定金属的准确距离与单单检测金属是否进入范围以内的对比),可以在系统中添加一个诸如LDC1612或LDC1101的电感至数字转换器。借助于这个双芯片解决方案,MSP430FR6989微控制器可被用来将系统保持在待机状态,直到金属被检测到,然后唤醒高分辨率LDC IC来捕捉精确的测量值。

  • 发表了主题帖: CPU和CLA的差异及误差处理技巧

    C28x+FPU架构的C2000微处理器在原有的C28x定点CPU的基础上加入了一些寄存器和指令,来支持IEEE 单精度浮点数的运算。对于在定点微处理器上编写的程序,浮点C2000也完全兼容,不需要对程序做出改动。浮点处理器相对于定点处理器有如下好处:编程更简单性能更优,比如除法,开方,FFT和IIR滤波等算法运算效率更高。程序鲁棒性更强。 一、IEEE754格式的浮点数C28x+FPU的单精度浮点数遵循IEEE754格式。它包括:1位符号位:0表示正数,1表示负数。8位阶码23位尾数 3130                                                                                    2322                                                  0符号位阶码尾数 表1:IEEE单精度浮点数符号位S阶码E尾数M值000正0100负00或10非0非规格化数(1)01-2540x00000-0x7FFFF正常范围正数(2)11-2540x00000-0x7FFFF正常范围负数(2)02550正无穷大12550负无穷大0或1255非0非数值(NaN) (1)非规格化数值非常小,计算公式为(-1)sx2(E-126)x0.M(2)正常范围数值计算公式为(-1)sx2(E-127)x1.M正常范围数值落在± ~1.7 x 10 -38 to ± ~3.4 x 10 +38范围内。从表1可以看出,IEEE754标准包括:标准数据格式和特殊值,比如非数值(NaN)和无穷大标准舍入模式和浮点运算多平台支持,包括德州仪器C67x系列芯片。 C2000对该标准作了一些简化:状态标志位和比较运算不区分正0和负0非规格化数值被认为是0对非数值(NaN)处理方式和无穷大一样。 IEEE754标准有5种舍入模式,C28x+FPU只支持其中两种:--截断:小数位不管大小全部舍去--就近舍入向偶舍入:这种模式下如果小数位小于5就舍去,大于5就进位,如果小数位为5,则舍入到最近的偶数。表2展示了不同的舍入模式对数据的影响。C28x+FPU编译器默认将微处理器配置为就近舍入向偶舍入模式[1]。表2:不同舍入模式示例模式 / 实际值+11.5+12.5−11.5−12.5就近舍入向偶舍入+12.0+12.0−12.0−12.0就近舍入远离0舍入+12.0+13.0−12.0−13.0截断+11.0+12.0−11.0−12.0向上舍入+12.0+13.0−11.0−12.0向下舍入+11.0+12.0−12.0−13.0   二、浮点C2000芯片运算技巧和注意点浮点数的精度由尾数位决定,绝大多数的数在用浮点数表示时都会有误差,这些误差很小,多数情况下可以忽略,但是在经过多次计算后这个误差可能会大到无法接受。下面用实例来进行说明,下面一段代码定义float类型变量,分别在TI最新的Delfino芯片F28379D的CPU1和CLA1上,将11.7加20001次。float CLATMPDATA=0;int index=20001;   while(index--)   {       CLATMPDATA=CLATMPDATA+11.7;}得到如下结果:https://e2echina.ti.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/7571.12.png其中CLATMPDATA1是在CLA中将11.7加20001次得到的结果,CLATMPDATA2是在CPU中将11.7加20001次得到的结果。可以看出两者所得到的结果不同,并且都和正确结果234011.7有较大差距。为何CPU和CLA计算结果不同? CPU和CLA运算结果的不同是由于其对浮点数的舍入模式的不同造成的,前文已经说过,C28x+FPU 编译器默认将CPU配置为就近舍入向偶舍入模式。而CLA不同,CLA默认为截断舍入模式[2]。在CLA的代码中,我们可以通过增加下述代码:__asm(" MSETFLG RNDF32=1");//1为就近舍入向偶舍入,0为截断舍入将CLA的舍入模式更改为就近舍入向偶舍入模式,然后再运行代码,可以得到和CPU同样的结果。 https://e2echina.ti.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/6886.13.png        2. 为何CPU和CLA计算结果都有较大误差?如何解决?11.7在用IEEE754格式的浮点数表示时为0x413b3333,其对应的实际值为11.69999980926513671875,可以看出误差很小,但是经过多次累加多次舍入后得到的结果误差较大,对此,我们可以将CLATMPDATA定义为long double型变量(64位),再次运行相同的代码,可以得到如下结果,可以看到误差很小可以忽略。https://e2echina.ti.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/7242.14.png需要指出的是,现有的C28x CPU只支持单精度(32位)的硬件浮点运算,对于64位双精度浮点数的运算都是通过软件实现的,所以其运算速率会慢很多。另外CLA不支持64位数。在这个实例中,我们可以分别观察float类型变量和long double类型变量的汇编代码如下:C code: CLATMPDATA2=CLATMPDATA2+11.7;如果CLATMPDATA2是float型变量,则相应的汇编代码为:00c08d:   E80209D8    MOVIZ        R0, #0x413b                                1cycle00c08f:   E2AF0112    MOV32        R1H, @0x12, UNCF  1cycle00c091:   E8099998    MOVXI        R0H, #0x3333                              1cycle00c093:   E7100040    ADDF32       R0H, R0H, R1H                            2cycle00c095:   7700        NOP                                                           1cycle00c096:   E2030012    MOV32        @0x12, R0H                                1cycle如果CLATMPDATA2是long double型变量,则相应的汇编代码为:00c08b:   7680005A    MOVL         XAR6, #0x00005a      1cycle00c08d:   8F00005A    MOVL         XAR4, #0x00005a      1cycle00c08f:   8F40C26A    MOVL         XAR5, #0x00c26a       1cycle00c091:   FF69        SPM          #0                                            1cycle00c092:   7640C0C9    LCR          FD$$ADD                          4cycle(跳转耗时)+25cycle(FD$$ADD函数内部需要25cycle)可以看出CPU对float类型数执行一次加法耗时7个cycle,对long double类型数执行一次加法耗时33个cycle。 三、结论1. C2000的CPU和CLA默认的舍入模式不同,在计算浮点数时可能会得到不同的结果,但是我们可以通过代码改变其舍入模式得到相同的结果。2. 单精度浮点数经过多次计算后可能会有较大误差,可以通过将变量定义为64位long double型解决精度问题。3. C28x CPU只支持单精度(32位)的硬件浮点运算,对于64位双精度浮点数的运算都是通过软件实现的,所以其运算速率会慢很多。在下一代的C2000产品中我们会实现对64位双精度浮点数运算的硬件支持。

  • 发表了主题帖: C2000上电引导模式解析

           在使用C2000的时候,经常遇到工程师说芯片仿真能够运行,但是单机跑却不能跑起来;或者在调试时,复位芯片 > run,发现程序不能跑起来。这其中的原因主要是没有了解C2000的引导模式设置。另外当我们想通过其他方式去引导芯片启动的时候,往往也需要清楚知道C2000的引导是怎么设置的。因此,在这里跟大家分享一下我对C2000引导模式的理解,希望对各位理解芯片从上电到跑到main这一段芯片运行情况有所帮助。         以C2000 Piccolo系列的引导模式为例,delfino稍微有点区别,concerto系列的引导则更复杂。但理解了Piccolo的引导原理对我们理解后面两个系列的芯片有非常大的帮助。1.首先我们根据图1来看一下芯片上电后的代码执行流程,当芯片在接收到一个复位信号后,会到0x3FFFC0去复位向量,该复位向量跳到BootROM 0x3FF75C中去执行bootloader的程序,这里主要有initboot, 和SelectBootMode, 以及一些外设引导的函数。SeleteBootMode根据芯片的硬件或软件设置来判断芯片该去哪里寻找程序入口,直接目的是如何找到main,然后执行应用程序。https://e2echina.ti.com/resized-image.ashx/__size/550x0/__key/communityserver-discussions-components-files/56/2260.QQ_2A62FE56_20130526234756.png                               图1. 芯片的复位流程图我们最常用到的主要有两种引导模式:一种是boot to RAM,即跳到0x000000的RAM中,去开始执行指令,主要针对程序加载在RAM的仿真模式;另外一种是boot to Flash,则跳到0x3F7FF6中去开始执行代码。相应的,程序会这两个入口地址0x000000, 0x3F7FF6放一条跳转指令,在codestart.asm源文件中,原因是在Flash的入口地址处只有两个单元的空间,后面是CSM模块,所以需要跳转;而在RAM中之所以也需要跳转,主要是因为在跳转到main之前,需要执行一小段代码_c_int00,该代码会使用0x000003之后的一段RAM,如果代码放在那里,在执行_c_int00之后会损坏代码。另外就是一些外设引导模式,如SCI引导以及SPI引导等,像我们常使用的C2PROG软件就支持SCI引导,然后通过串口下载程序。2. 那么芯片的SelectBootMode函数是如何来判断芯片的引导模式(boot mode)呢?从图2中我们可以看到,首先会判断芯片是否连接仿真器,根据TRST引脚的状态来判断。如果是仿真器连接,则进入仿真引导(Emulation Boot),这时候芯片的引导主要是靠2个RAM的单元来判断,即EMU_BMODE和EMU_KEY,地址是0xD01和0xD00,所以我们在连接仿真器后,可以首先修改这两个EMU_BMODE和EMU_KEY来设置引导模式;如果没有连接仿真器,则进入单机跑模式(stand alone), 这时候芯片的引导主要靠GPIO34和GPIO37的状态,以及两个OTP存储单元的值来判断。不过我们经常没有使用OTP这两个单元,用GPIO的状态就已经够了。https://e2echina.ti.com/resized-image.ashx/__size/550x0/__key/communityserver-discussions-components-files/56/2577.QQ_2A62FE56_20130527001212.png                                            图2. 两种状态下的引导模式3. 仿真器连接时的引导模式配置https://e2echina.ti.com/resized-image.ashx/__size/550x0/__key/communityserver-discussions-components-files/56/4628._2A677D540D54_.jpg 当带仿真器的时候,芯片会根据EMU_BMODE和EMU_KEY这两个单元的值来判断引导模式,比如我们带仿真器最常用的就是引导到RAM,即需要设置EMU_KEY = 0X55AA, EMU_BMODE = 0X000A。当我们在仿真的时候,程序load到Flash的时候,就需要设置EMU_KEY = 0X55AA, EMU_BMODE = 0X000B,如果EMU_BMODE = 0x0003的话,由于我们没有对OTP单元进行操作,即OTP的值为0xFFFF,所以这种情况下也是boot to flash。在带仿真器跑程序的时候,我们发现即使我们不配置引导模式,程序也能够跑到main,这主要是因为CCS的功能,在程序load到芯片的时候,或是reset > restart,CCS会自动屏蔽bootloader的过程,自动跳到main函数入口。如果我们只选择reset CPU,则需要配置引导模式,即对0x0d01, 0x0d00这两个单元在memory window进行写相应的值,或是在script的菜单中选择引导模式,程序才能够跑到main中。4. 单机跑是引导模式配置https://e2echina.ti.com/resized-image.ashx/__size/550x0/__key/communityserver-discussions-components-files/56/2185.QQ_2A62FE56_20130527005213.png单机跑的时候,我们最常用的是跑到Flash中,这时候则需要配置GPIO34和GPIO37的引脚为高电平,由于Piccolo系列芯片这几个引导都有上电默认内部上拉使能,所以即使不用加上拉电阻也可以。这时候的引导模式是GetMode,由于我们没有去配置OTP两个单元,所以这两个单元默认为0xFFFF,所以芯片的引导模式最终为boot to Flash。5. 其他外设的引导模式从上面这几张图中可以看到还有许多外设引导的功能,以SCI引导为例,带仿真器和单机跑的时候,都要配置相应的存储单元以及GPIO口状态,使之配置为SCI boot mode。然后芯片会SCI boot 函数,准备接收串口的代码,上位机要根据SCI boot的通信协议,生成SCI boot的数据流格式,将数据通过串口发送给芯片,芯片的bootloader会接收该代码,接收完后会根据该数据流中的起始运行地址去开始执行从SCI下载的代码。

  • 发表了主题帖: TMS320F28x7x中使用IQmat

          由于TMS320F28x7x系列芯片内部集成了TMU(Trigonometric Math Unit)专门用于加速常用的三角函数和算术运算的执行,可以5个cycles以内得到正弦/余弦/正切等运算结果,因此TMS320F28x7x系列芯片的ROM中不再固化IQmathTables和相关三角函数。同时,在新的设计中我们更推荐用户使用TMU去处理三角函数运算。为了兼容基于IQmath的程序的移植,本文给出了基于TMS320F2807x的IQmath的移植方法。一.测试相关环境测试相关的软硬件环境如下表所列:CCS Version7.2.0.00013Compiler VersionTI v16.9.3.LTSIQmath VersionV1.6.0测试芯片型号TMS320F28075 您可以选择任意示例工程,这里选择的工程为 adc_soc_epwm_cpu01,它的工程文件的目录为:C:\ti\controlSUITE\device_support\F2807x\v210\F2807x_examples_Cpu1\adc_soc_epwm\cpu01在CCS中import该工程后,右击工程,选择Properties,并打开Build Configuration下的Set Active,选择CPU1_FLASH,使程序在flash下运行。二. 工程修改步骤1.在新的工程中添加IQmath库文件,由于TMS320F2807x为浮点运算的芯片,所以选择IQmath_fpu32.lib这个库。2.在新的工程中添加IQmath函数库的头文件IQmathLib.h,并在原有工程中添加以下语句:#include "IQmathLib.h";以上两均添加好的工程的文件列表如下:https://e2echina.ti.com/resized-image/__size/1230x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/2018_2D00_03_2D00_05_5F00_175603.png3.由于IQmathTables不再固化在芯片的ROM中,需要将这一部分的程序拷贝到FLASH中,则要修改CMD文件,增加了IQmath和IQmathTables的内存分配。这个CMD文件在TI官方的软件包controlSUITE中已经提供,地址如下:C:\ti\controlSUITE\device_support\F2807x\v210\F2807x_common\cmd选择2807x_FLASH_IQMATH_lnk_cpu1.cmd,https://e2echina.ti.com/resized-image/__size/1230x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/2018_2D00_03_2D00_05_5F00_175611.png在FLASHB和FLASHC中专门给IQmath和IQmathTables分配了空间:https://e2echina.ti.com/resized-image/__size/1230x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/2018_2D00_03_2D00_05_5F00_175620.png4.为了保持一个工程中仅有一个CMD文件,将工程中自带的Flash_lnk.cmd删除。右键工程文件,选择properties,在CCS Build下选择C2000 Linker,删除2807x_Generic_FLASH_lnk.cmd文件。https://e2echina.ti.com/resized-image/__size/1230x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/2018_2D00_03_2D00_05_5F00_175636.png当然,您也可以选择修改原有的CMD文件,只要在FLASH中给IQmath和IQmathTables分配足够的空间即可。5.移植完成以后,在程序中添加IQmath函数的测试代码。首先在main函数前增加IQ格式的变量定义:_iq IQresult =_IQ(1.0);_iq IQsource;在main函数调用IQmath库中的任意函数,这里我调用了IQsin()函数进行测试:IQresult =_IQsin(IQsource);通过实际debug,计算结果与预期相符。三. TMS320F2807x Piccolo系列芯片在运算能力上的提升1. 浮点运算单元FPUFPU全称Float Point Unit,即浮点运算单元,是专用于浮点运算的处理器。在大多数现在的通用计算机架构中,会在CPU中集成一个或多个浮点运算器,但许多嵌入式处理器没有在硬件上支持浮点数运算。TMS320F2807x Piccolo系列芯片使用C28x+FPU的架构,在原有的C28x定点CPU的基础上加入了一些寄存器和指令,来支持IEEE 单精度浮点数的运算。对于在定点微处理器上编写的程序,浮点C2000也完全兼容,不需要对程序做出改动。下表给出了与定点处理器相比,浮点处理器在计算能力上的提升:https://e2echina.ti.com/resized-image/__size/1230x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/2018_2D00_03_2D00_05_5F00_175651.png可见,与定点处理器相比,浮点处理器不但在程序编写上更加简洁,性能上也有了很大的提升,在进行除法,开方,FFT和IIR滤波等算法等指令中效率更高。2. 三角函数运算单元TMU与此同时,该系列芯片内部还集成了浮点三角函数运算单元TMU,它增强了C28-FPU的指令集。通过提供以单周期高效方式执行某些三角函数和算术函数的指令,减少了常见复杂函数运算的处理延迟,进一步提高了实时控制算法的性能。带有TMU单元和没有TMU单元的CPU在一些常见函数的执行周期的对比情况如下表:https://e2echina.ti.com/resized-image/__size/1230x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/2018_2D00_03_2D00_05_5F00_175706.pngTMU可以对许多常用的实时控制算法有极大的优化,常见的有以下几种:1.Park和Inverse Park变换;2.空间矢量控制;3.dq0和Inverse dq0变换;4.FFT幅度和相位计算。以Park变换为例,使用FPU来执行,通常需要80到100多个周期来,而集成了TMU单元的CPU仅需13个指令周期即可完成,与没有TMU相比,性能提高了85%。因此,针对复杂且对实时控制要求高的控制算法中,相信集成了FPU和TMU的TMS320F2807x Piccolo系列芯片是您非常合适的选择。

  • 发表了主题帖: “C2000+TMS570” 双芯片方案在汽车电驱动功能安全上的应用

    随着新能源汽车的迅猛发展和汽车电子系统越来越复杂,汽车的功能安全越来越备受重视,可靠性的要求也越来越高,ISO 26262是国际功能安全的标准,按照ISO26262标准流程开发产品能有效提高汽车电子、电气产品功能安全。在汽车电驱动的开发上越有越多的客户有功能安全设计的需要,必须满足系统ASIL C安全等级,目前针对电驱动的功能安全的主控芯片方案有单芯片的方案,也有双芯片的方案,两种方案各有优缺点。TI主推的的双芯片的方案是“C2000+TMS570”,同时利用了C2000在电机控制上实时性的优势以及TMS570在功能安全方案的特点,被越来越多的客户采样应用于汽车电驱动的功能安全项目上。https://e2echina.ti.com/resized-image/__size/700x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/aaa.png图1. 基于“F28379S + TMS570LS0714”架构的功能安全电驱动框图图1为“F28379S + TMS570LS0714”双芯片架构的功能安全的电驱动框图,汽车电驱动系统的主要安全目标是避免非预期的扭矩突变,因此在系统设计中需要采取的安全措施是对输出扭矩的监控,要求为ASIL C, 根据ISO 26262 ASIL分解原则可以将系统的ASIL C分解为“ASIL C + QM”,即将C2000做分解为QM级别电机控制,TMS570分解为ASIL C的安全功能监控,实现整个系统的ASIL C控制,这样既能利用C2000在电机控制上实时性的优势,也能利用TMS570专门做功能安全方面的特性,而且在软件层面上,可以把大部分的电机控制的代码放在C2000上,只需满足QM级别的要求,把小部分跟安全监控相关代码放在TMS570上执行,满足ASIL C的要求,大大减少软件的开发时间和降低成本。F28379S和TMS570LS017通过SPI进行通信,进行数据交互和相互校验,也是安全机制实现的一种方式,如F28379S和TMS570LS0714可以同时对某一路的电流采样进行采样,采样结果通过SPI传输后进行相互校验,如不一致则进行错误处理,将系统控制到安全状态。C2000是TI专门为数字电源和电机控制的应用设计的微控制器,近年来随着新能源汽车的高速发展,C2000产品也广泛应用电动汽车上的电机控制器,能够满足电机控制实时性的电机控制性能要求,TMS320F28079S是目前最高性能的C2000产品,满足电机控制转速越来越高,实时性要求越来越高的控制需求,主要有以下新的特点:200MHz主频的C28x 核以及 CLA 的协处理器;4 路差分输入的16位 ADC模块;三角函数加速器 (TMU,对SIN, COS, ARCTAN 等指令执行只需要1 到 3 个周期;内置8路窗口比较器可以用来做过流保护,过欠压保护等;内置CLB可编程逻辑控制单元;8 路Sigma Delta抽样滤波器。 TMS570全系列MCU都是通过了第三方认证公司TUV-SUD ASIL D最高等级标准的认证,在设计生产流程方面严格按照26262的要求进行,同时有独特的安全架构和完善的安全机制处理硬件随机失效。目前广泛应用于新能源车上的Traction Inverter、BMS、 OBC、 VCU等ECU系统上。https://e2echina.ti.com/resized-image/__size/700x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-74/bbb.png图2. TMS570 的安全特性框图为了管理随机硬件失效,TMS570 MCU集成了很多安全机制,并且采用的是“安全岛”的安全理念,即对能确保MCU软件正常运行的最小系统部分采用的是硬件诊断的安全机制,如上图红色部分, 包括了电源、时钟、CPU,FLASH,RAM等模块,例如采用了双核锁步的CPU架构,FLASH错误校正代码 (ECC),RAM ECC、Memory BIST等硬件的安全机制。为了减少共因失效,TMS570 MCU在空间上和时间上都采取措施,在空间上将其中一个CPU镜像翻转后垂直于另外一个CPU,两个CPU在空间上距离超过了100 μm,在时间上两个CPU 的运算错开2个时钟周期,运算结果送至专门的比较模块进行实时比较,如有一个CPU运算有问题就马上报错处理,TMS570片上带有FLASH和RAM ECC的功能,即对FLASH或RAM的某一个位错误进行纠正,如果两个位发生错误则进行报错处理,TMS570有两路独立的ADC模块,可以同时对两路信号进行同时采样转化,可运用在电流,电压,温度等模拟量的冗余校验功能中,确保监控数据的正确性,减少了芯片失效而带来的故障。ADC模块还支持ADC通道自检功能,可以检测出引脚短路到电源,GND等故障。

  • 发表了主题帖: 集成功率器件可简化FPGA和SoC设计

    集成柔性功率器件在同一封装内包含多个DC/DC转换器。这些DC/DC转换器可以是单个封装中的降压转换器、升压转换器和/或LDO的任何组合。图1是一个示例功能框图,其中LM26480包括两个2MHz高效1.5A降压转换器和连个300mA LDO。 https://e2echina.ti.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-65/66346.1.png 图1:LM26480功能框图 让我们通过一个例子来说明使用集成的柔性功率器件的好处。设想设计为由SoC或FPGA控制的无人机设计电源管理系统。图2显示了该系统中的四个组件,它们完全匹配电源管理IC(PMIC)。 https://e2echina.ti.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-65/2133.2.jpg 图2:分立与集成功率管理对比 所示的两种电源解决方案都能产生四个独立的电源轨,为系统的全球定位系统(GPS)、输入/输出、核心电压和双倍数据速率类型3(DDR3)供电。在这两个选项中,前端开关模式电源有效地将无人机电池的电压降至5V电源电压,如图2的输入所示。分立组件可以进一步降低此5V电源(如选项1所示)或集成器件(如选项2所示)。 想象一下,使用四个独立的器件为这个系统供电:两个LP3982 300mA单通道LDO和两个TLV62084 2A降压转换器。您可以使用这些分立的DC/DC转换器为系统供电,但仍需要四个独立的有源组件。考虑到有源组件具有最高可靠性问题,这可能不是最佳解决方案。 替代解决方案可以使用集成柔性功率器件,仅利用单个IC就能提供系统期望的电压和电流能力。如图2所示,这提供了许多益处。首先,与分立解决方案相比,集成解决方案的成本效益高20%。其次,与四个分立器件的组合电路板空间相比,PMIC解决方案需要的电路板空间低10%。第三,集成器件需要的外部组件少于分立解决方案,这进一步减小了整体尺寸和成本。减少物料清单(BOM)器件数量可以提高可靠性。因此,在设计需要多个电源轨的系统时,尤其是在需要FPGA或SoC电源的应用中,请考虑集成柔性功率器件。

  • 发表了主题帖: AMIC110 SoC的工业通信问题

          作为通信处理器,AMIC110 SoC为静态解决方案提供了灵活的替代方案。其中一个优点是AMIC110 SoC的软件可编程性使您可以运行不同的通信标准,而非仅针对一种标准。这使得在使用不同协议的不同项目中重用同一设备成为可能。如果协议发布了功能变更,或者在新的协议发布后需要完全对SoC进行重新编程,那么可重新编程性便使得升级也变得更加容易。这些优点使得AMIC110 SoC成为向设备添加工业通信的绝佳方式。       例如,一个电机控制应用程序可使用C2000™微控制器(MCU)来控制电机,如图1所示。为了添加像EtherCAT这样的协议,C2000 MCU可通过串行外设接口(SPI)与AMIC110进行通信,而AMIC110 SoC将处理至网络其余部分的协议基通信。https://e2echina.ti.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-01-22/3583.2017_2D00_06_2D00_07_5F00_155956.png图1:使用AMIC110和C2000实现电机控制的示例          AMIC110 SoC是Sitara处理器系列的一部分,并且延续该系列的众多优点,如使用处理器软件开发工具包(SDK)作为标准软件平台。处理器SDK可轻松地在Sitara处理器之间迁移软件,这可减少新处理器的学习时间,并使您能够充分利用现有的产品。         工业以太网协议是工厂自动化的一个重要组成部分。现在出台了许多协议标准,包括EtherCAT、Profinet、Powerlink、以太网/工业协议(IP)和Sercos III。拥有众多不同协议使开发可用于多个不同网络的解决方案更具挑战性。一个解决方案是拥有一个可针对不同协议进行再编程的单个设备,如TI最新推出的AMIC110片上系统(SoC)。        TI Sitara™ARM®处理器通过可编程实时单元工业通信子系统(PRU-ICSS)实现10多种工业通信标准。如果设计中已存在现有的应用处理器,添加全功能ARM®处理器则可能不切实际。若是这种情况,您可利用现有产品,还可通过添加像AMIC110 SoC这样的通信处理器来实现PRU-ICSS的功能。尽管AMIC110SoC包含ARMCortex®-A8内核,但它可运行以太网堆栈,而非作为主处理器。

  • 发表了主题帖: CC6678数字信号处理器 (DSP) 的多种用法

          与DSP的其中一位发明者,Gene Frantz一样,对我来说,了解客户如何将我们的处理器应用到实际环境中是再开心不过的一件事情了。然而,我发现基于KeyStone™ 的TMS320C6678,一款8内核C66x DSP特别有意思,这是因为这款器件是市面上较早的高性能多核DSP之一。虽然有超过100名客户已经在他们的产品中采用了C6678 DSP,但是我可以很肯定地说,对于定点和浮点C6678 DSP来说,至少有50种不同的使用方法!不过也别担心,我不会将这个冗长的列表直接抛给你,我只是想与你分享其中5个最常见的应用。        加快回程速度—Keystone系列无线基站片上系统 (SoC) 已经充斥于无线市场,不过C6678 DSP也在无线回程领域内找到了用武之地。Sub10系统采用C6678 DSP作为其无线回程网络同步平台的基础,依赖这款基于Keystone的DSP实时算法处理和网络对接。     进行全新扫描—由于图像处理是数字信号处理的长项,大量的TI DSP在医疗成像设备中发挥了十分重要的作用,而C6678 DSP也不例外。来看一看,如何将这款Keystone多核DSP应用到你的下一个医疗成像应用中。     停留在总线上—或者在使用合成孔径雷达 (SAR) 产品时采用无线传输方式。SAR技术在基于商用和军用雷达的应用中很流行,而由于SAR对先行信号处理和计算密集型处理的严重依赖性,C6678多核DSP成为针对这一函数的最佳内核。来看看如何在SAR函数中充分利用这款高性能DSP。      无需讨论太多—我们在智能手机、平板电脑等设备上使用了越来越多的流媒体视频,这使我们现在很少有时间进行面对面的交谈。所有这些视频流严重增加了网络中服务器和内容分发装置的负担,正因如此,诸如H.265的视频压缩/解压缩标准的执行对于实时性能至关重要。C6678在执行视频编码时具有很高效率,并且是一款能耗极低的软件可编程芯片。在C6678 DSP如何成为一款理想的H.265处理引擎方面,我们有更多信息。      快速傅里叶变换 (FFT) 是关键—由于航空电子和国防应用对于实时信号处理的依赖程度很高,这些应用与快速傅里叶变换 (FFT) 之间的密切关系也就不言而喻了;在很多情况下会用到超大FFT。查看这份FFT白皮书,了解具有FFT协处理器的C6678 DSP如何成为FFT处理和航空电子与国防应用的理想选择,以及如何以较低功率和小占板面积来保持最优性能。

  • 发表了主题帖: DS125DF1610产品资料中的典型应用图

           在高速信号电路设计中,信号调理产品被广泛使用。其中retimer类产品涉及到寄存器配置,因此相比较而言,它的使用最为复杂。本文将以DS125DF1610为例,具体讲解retimer类产品的电路设计与寄存器配置。       下图是DS125DF1610产品资料中的典型应用图。https://e2echina.ti.com/resized-image/__size/1230x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-01-17/2018_2D00_03_2D00_05_5F00_175050.png                                  硬件电路设计可以概括为四个关键部分:1. 电源:TI的retimer产品供电方式都非常简单,一般只需2.5V单电源,像DS125DF111还可以支持单3.3V供电。从下表可以看到,retimer对电源噪声性能要求不高,通常情况下可以采用DC/DC电源方案,在供电管脚增加适当的滤波电容即可。https://e2echina.ti.com/resized-image/__size/1230x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-01-17/2018_2D00_03_2D00_05_5F00_175109.png            另外,电源选型时还需要注意功耗问题,在芯片资料中都会给出各种功能组合下的功耗,那么我们就可以根据实际应用计算出最大的功耗,作为电源方案选择的一个参考标准。2. 时钟:外部参考时钟主要是给retimer内部VCO提供一个校准的参考,它只要求频率的精度在+/-100ppm范围之内即可,而对phase noise没有特别的要求。需要注意的是不同的retimer支持的时钟频率和电平有区别。像DS125DF1610可以支持25 MHz,125 MHz和312.5MHz的单端或差分输入,而大部分10G retimer,比如DS125DF111只支持25MHz的单端输入。设计时需要根据数据手册来进行选择。https://e2echina.ti.com/resized-image/__size/1230x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-01-17/2018_2D00_03_2D00_05_5F00_175121.png  3. AC耦合电容:高速信号传输通常需要做AC耦合,考虑到布板的方便性以及信号的完整性,TI部分retimer产品在芯片内部会集成该耦合电容,这个需要设计时从产品手册上去确认,避免遗漏或者重复添加。4. I/O口耐压:如前面所讲,TI retimer一般都是2.5V单电源供电,因此需要注意它的I/O口耐压问题。为了方便与板上主控芯片的对接,retimer内部对I2C,RESET和INTERRUPT口做了特殊处理,都允许直接上拉到3.3V,这个可以从典型应用图上看到。而其他I/O口就需要注意不能超过电源供电电压。高速信号电路设计还有一个非常重要的地方就是PCB layout,它直接影响信号传输中的性能。在layout时,我们需要注意:信号、电源和地层的合理分配,信号尽可能的远离噪声源;保持高速差分线的对称,以及阻抗控制在100Ω±5%以内;避免差分线的剧烈弯折,使用45°或者曲线弯折;保证不同差分线对间的skew匹配。沿信号路径,避免参考平面的不连续而引起阻抗的变化,注意电流返回路径;AC耦合电容最大选择0402封装,尽可能的保证走线宽度一致,尽量减少过孔数量;选择的连接器要能满足最高速率性能要求。 在做电路设计时,只要注意到上面提到的这些地方,应该就可以保证芯片正常上电工作和传输链路上信号的性能,接下来我们需要做的是寄存器配置。需要注意,上电后系统最佳的配置顺序是先ASIC,后retimer。这是因为如果retimer先于ASIC 配置,那么这时ASIC高速I/O口发送的数据不稳定,而retimer只要检测到有信号后,就会尝试去锁定,此时自适应出来的参数就不是最优的。下面还是以DS125DF1610为例,假设外部采用125MHz的参考时钟,系统需要兼容12.5Gbps和6.25Gbps速率,下表就是我们常用到的配置流程。https://e2echina.ti.com/resized-image/__size/1230x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-01-17/2018_2D00_03_2D00_05_5F00_175134.png在讲解retimer配置的具体步骤之前,需要了解什么是掩码方式写入。因为在配置寄存器时,只能对需要配置的bit位进行修改,而其他bit位要保持默认值不变。以step 2为例,需要对寄存器0x02进行掩码为0x60的写入操作,写入值为0x20。首先,掩码0x60展开后只有bit 5和6为1,也就是说我们只能修改寄存器0x02的bit 5和6,写入的值为数据0x20相对应的bit位值,而寄存器其他bit位要保持出厂默认值不变。下面将详细说明每步配置的作用。Step 1:retimer内部寄存器一般分成两类:shared寄存器和channel寄存器。像retimer的一些全局信息,比如chip ID,外部参考时钟的选择等等都在shared寄存器里。因此在配置之前,要清楚将要操作的是哪类寄存器。寄存器0xFF的bit 0就是进行选择。https://e2echina.ti.com/resized-image/__size/1230x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-01-17/2018_2D00_03_2D00_05_5F00_175145.pngStep 2:在step 1中已经选定操作的是shared寄存器,所以接下来对0x02寄存器的操作就是选择外部参考时钟,根据datasheet给出的值选中即可。https://e2echina.ti.com/resized-image/__size/1230x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-01-17/2018_2D00_03_2D00_05_5F00_175154.pngStep 3~5:一般shared寄存器需要操作的就是选择参考时钟,其它的配置都在channel寄存器中。首先Step 3选中channel寄存器,step 4和5选择哪些channel将同时被修改。如果所有channel采用相同配置,最简便的方法就是将0xFF的bit 1置为1,那么将会以广播的方式修改所有通道,而不用再去配置channel选择寄存器。Step 6:配置channel寄存器前,将CDR置于复位状态,以保证配置没有完成之前,retimer不会尝试去锁定。Step 7:CDR锁定速率有两种配置方式。如果系统速率是常见的标准速率,比如下表中列举的值,那么我们直接选择相应的寄存器值即可。但如果不是标准速率,比如11.3Gbps,那么我们就需要采用手动计算VCO工作频率,具体步骤可以参考DS125DF1610产品资料的8.3.2章节。https://e2echina.ti.com/resized-image/__size/1230x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-01-17/2018_2D00_03_2D00_05_5F00_175205.pngStep 8:根据CDR锁定时CTLE和DFE自适应算法的区别,通常有四种工作模式可选。如下表,可以根据调试情况,通过寄存器0x31选择其中一种。https://e2echina.ti.com/resized-image/__size/1230x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-01-17/2018_2D00_03_2D00_05_5F00_175214.png四种模式具体区别如下:Mode 0:手动模式,CTLE和DFE均需要手动设置;Mode 1:CTLE自适应,而DFE需要手动设置;Mode 2:CTLE首先自适应到一个最优的设置,然后DFE再自适应调整;Mode 3:CTLE首先自适应到一个最低要求的水平,然后DFE自适应到最佳设置,最后CTLE再重新自适应到最佳的水平。 Step 9:根据上一步选择的工作模式确定是否需要使能DFE。Step 10~15:高速接口都是只有接收侧参数可以自适应,发送侧参数需要手动设置。Step 10到15就是用于配置retimer发送信号幅度,加重和FIR滤波器。Step 16:释放CDR复位。通常情况下,完成上面的配置后,retimer就可以正常锁定工作。如果测试中链路上有误码的话,则需要根据实际情况去优化各个参数。

  • 发表了主题帖: TI 高速信号调理产品选型指导

             随着通信容量的提升,设备端口支持的速率越来越高,从4G时代常见的单口10Gbps和25Gbps*4,到5G时代即将会部署的单口25Gbps,甚至50Gbps,以及56Gbps*8的400G应用。这必将对电路的设计提出了更高的要求。为了补偿高速信号在PCB板上的损耗,提升信号的质量,通常会在链路中加入高速信号调理的芯片。     TI作为全球领先的模拟半导体解决方案厂商,一直以来在高速信号调理产品上不断的投入,从早期的2.5Gbps产品,到当前大量使用的单通道10Gbps和25Gbps产品,以及后续的56Gbps产品,都有相应的解决方案。TI的产品型号众多,在日常的支持工作中,作者发现许多工程师对该类产品的选型不太熟悉,本文将从多个角度来介绍该类产品的选型。首先从功能上看,我们引入高速信号调理的方案,目的是为了解决高速信号传输过程中引入的插损(Insertion Loss),抖动(Jitter),串扰(Crosstalk)和反射(Reflection)。根据这些功能需求,TI产品分为三大类:                                            Repeater:补偿插损Retimer:在repeater的基础上,内部加入CDR,可以优化信号抖动Advanced Retimer:在Retimer的基础上,引入DFE功能,可以解决串扰和反射的问题 https://e2echina.ti.com/resized-image/__size/1230x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-01-17/2018_2D00_03_2D00_05_5F00_174712.png从产品的命名上可以分辨出产品的类别,以DS100为例:repeater产品命名为DS100BR410,retimer命名为DS100RT410,advanced retime命名为DS100DF410。实际应用中该选哪类产品,需要根据系统走线以及信号性能要求去做评估。如果前期不好做出决策的话,建议先按照功能最强大的DF系列来做设计。通常三个系列有管脚兼容的替换产品,后续可以根据调试情况再定。其次,选择正确速率的产品非常重要,特别是带有CDR的产品,它并不能连续支持所有的速率,因此一定要根据实际需求确定好产品型号。对于repeater类产品,它可以支持最高速率以下的连续速率。所以选型时,只要保证芯片支持的最高速率不小于实际速率需求即可。系列最高速率(bps)DS10010.3125GDS12512.5GDS28028G Retimer类产品受到内部CDR的VCO频率范围限制,只能支持部分范围的连续速率,以及下表列出的子速率,而无法向下兼容所有连续速率。系列连续速率范围(bps)子速率DS10010.3125G/2, /4, /8DS1108.5~11.3G/2, /4, /8DS1259.8~12.5G/2, /4, /8DS25020.6~25.8G/2, /4DS28020.2~28.4G/2, /4 比如需要同时支持25.78Gbps和10.3125Gbps,就可以选择DS250DF810。其中25.78Gbps速率落在连续支持的范围,10.3125Gbps则可以用25.625Gbps的1/2子速率。还有一个非常重要的地方需要注意:高速链路是否需要支持link training,比如常见的KR和PCIE接口,我们就不能选择带有CDR的产品,因为CDR会影响training的过程无法完成。而选择repeater时,一定要支持linear模式,这样才能保证training的顺利完成。TI有专门针对这些应用的产品,比如DS100KR800和DS80PCI402。除了上述这些关键参数帮助选型之外,还可以利用TI的在线工具WEBENCH,选择设计所需速率,具体的应用场景和协议标准后,系统就会有相应的推荐方案,并且可以进行在线性能仿真,非常简单实用。 https://e2echina.ti.com/resized-image/__size/1230x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-01-17/2018_2D00_03_2D00_05_5F00_174740.png 通过上面的这些方法,应该就可以选择出一款合适的高性价比产品。

TA暂时无记录哦~

最近访客

< 1/1 >

统计信息

已有17人来访过

  • 芯币:838
  • 好友:--
  • 主题:275
  • 回复:23
  • 课时:--
  • 资源:--

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言