灵动微

背景

随着科技的不断发展, LCD 显示技术已经成为市场主流。LCD显示能够提供均匀的、流畅的、色彩鲜艳的动态或静态的图像,尤其在家电应用、智能家居应用、消费电子等产品中,受到了广大消费者的青睐,同时也受到了市场的广泛关注,为此,灵动微电子推出了搭载MM32系列MCU的SPI LCD彩屏参考方案。

硬件方案介绍

LCD显示应用开发一直以来都是方案开发公司的难点项目,在开发过程中的图片转码、压缩、布局和存储等开发过程都需要花费大量的时间成本,同时个性化的创意显示方案和炫酷的显示效果对硬件的要求越来越高,屏幕刷新速率和硬件成本之间难以平衡。灵动微电子推出的SPI LCD显示参考方案,通过SPI接口读取外部SPI FLASH存储芯片中存储的字体、图片等数据资源,再通过另外一路SPI驱动SPI LCD彩屏显示。对于不同尺寸、不同分辨率的 SPI LCD 彩屏,客户可以选择灵动微电子不同规格的MCU来实现刷屏效果,硬件设计框图如下所示:

1.png

灵动微电子推出的SPI LCD彩屏参考方案,可以为用户提供MM32F0140、MM32F0160、MM32F5230、MM32F5330等多个系列MCU作为主控,可以满足不同应用场景、功耗及成本需求。

2.png

MM32F0140系列:

https://www.mindmotion.com.cn/products/mm32mcu/mm32f/mm32f_value_line/mm32f0140/ 

3.jpg

MM32F0160系列:

https://www.mindmotion.com.cn/products/mm32mcu/mm32f/mm32f_value_line/mm32f0160/ 

4.jpg

MM32F5230系列:

https://www.mindmotion.com.cn/products/mm32mcu/mm32f/mm32f_performance/mm32f5230/ 

5.jpg

MM32F5330系列:

https://www.mindmotion.com.cn/products/mm32mcu/mm32f/mm32f_performance/mm32f5330/ 

6.jpg

灵动微电子基于MM32F0140、MM32F0160、MM32F5230、MM32F5330 等系列MCU,已经完成了SPI LCD彩屏的完整显示方案,并能够提供硬件参考、软件参考设计和开发工具等,可以帮助客户快速的完成产品设计,提供更加高效、稳定的解决方案。

软件方案介绍

灵动微电子提供的SPI LCD彩屏参考方案,包括MCU的数据手册、用户手册、开发板、参考原理图、驱动库及例程、彩屏驱动程序、示例代码、软件工具使用说明及完整的GUI等,可以帮助客户快速应用到实际项目中去,加快产品的研发进度,能将产品快速地推向终端市场。

SPI LCD彩屏参考方案的软件部分包含了SPI FLASH驱动及读写操作、SPI LCD彩屏驱动及显示,GUI API函数等。通过驱动分层架构设计,方便客户移植,能够快速添加LCD软件部分到实际项目代码中。

7.png

灵动微电子基于MM32F0140、MM32F0160、MM32F5330等系列MCU已经完成了针对不同尺寸、不同分辨率、不同显示驱动的SPI LCD彩屏的完整软件设计,可以帮助客户快速的完成硬件方案验证、显示效果调试、显示驱动移植等工作。

方案性能及效果

灵动微电子推出的部分系列SPI LCD彩屏参考方案,使用MM32 MCU特殊的SPI控制技术,结合软件处理算法,能够实现高效的刷屏技术,MCU资源和彩屏全屏刷新性能如下表所示:

8.png

0.96寸(80x160)实际显示效果展示:

9.png

1.47寸(172x320)实际显示效果展示:

10.png

方案优势

灵动微电子的SPI LCD彩屏参考方案,使用灵动微电子MCU作为主控,通过SPI接口读取外挂SPI FLASH存储芯片中的字体、图片等数据资源,然后再通过SPI接口将显示数据传输到SPI LCD彩屏上进行显示,此方案有如下优势:

  • 多规格MCU供选择,满足客户不同方案需求。

  • 使用MM32 MCU特殊的SPI控制技术,结合软件处理算法,1个SPI接口的MCU也能实现高效刷屏效果。

  • 完整的软硬件参考方案,加快客户产品研发。

  • 控制简单,外围电路易实现。

  • 支持所有3线/4线SPI接口的LCD彩屏,客户可根据LCD彩屏的驱动、显示分辨率选择适合的MCU。

  • 针对不同应用场景,能够根据其他功能资源需求进行平台化MCU选型,方便客户定制化需求方案的开发。

总结

灵动微电子提供的SPI LCD彩屏参考方案,基于MM32 MCU特殊的SPI控制技术,结合软件处理算法,实现方式灵活,外围电路易实现,控制简单,非常利于自动化生产测试,可以大大的缩短了产品样机调试的周期。同时,借助一些辅助系统调试的功能,能为客户带来全方位、高性能的LCD显示屏背光驱动方案。此外,灵动微电子可以提供全方位的线上及线下支持,帮助客户快速的完成产品研发,助力客户产品量产,快速上市。有关资料申请事宜,请和灵动微电子的销售同事接洽。

来源:灵动MM32MCU

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 27

1►FlexCAN简介

FlexCAN模块是一个通信控制器,扩展了CAN FD功能,遵循ISO 11898-1标准、CAN FD和CAN 2.0B协议规范。 CAN协议主要被设计用作车载串行总线,满足实时处理,带宽要求,车辆在电磁干扰环境下的可靠操作,该模块支持标准和扩展帧,支持最大64字节有效负载,传输速率高达 8Mbps,并且具有非常灵活的用于传输和接收的邮箱系统和RxFIFO接收机制。邮箱系统由 32 个报文缓冲区(MB)组成。

2►FlexCAN的功能框图

FlexCAN 的功能框图如下图1所示,包括用于存储报文缓冲区(MB)、接收全局掩码寄存器、接收私有掩码寄存器、接收(Rx) FIFO 过滤器以及接收 FIFO 标识符过滤器的内存。

1.png

图1 FlexCAN功能框图

如上图1所示为FlexCAN的功能框图,协议引擎(PE)子模块管理 CAN 总线上的串行通信:

  • 请求存取 RAM 接收和传输帧

  • 验收接收到的报文

  • 进行错误处理

  • 检测 CAN FD 报文

控制器主机接口(CHI)子模块负责选择接收和传输的报文缓冲区,以及对报文的仲裁和 ID 匹配算法。

总线接口单元(BIU)子模块控制内部接口总线的访问,建立与 CPU 和其他模块的连接。时钟、地址和数据总线、中断输出、 DMA 都通过 BIU 进行访问。

3►FlexCAN的时钟

如下图2所示为产生 PE 时钟的电路结构。时钟源选择位(CAN_CTRL1.CLKSRC)定义了内部时钟为异步时钟或同步时钟。其中,同步时钟为外设时钟(由APB1总线时钟提供);异步时钟的时钟源可选(细节请参考 RCC 章节 RCC_CFGR2寄存器)。为保证可靠运行,应在模块禁止模式时(CAN_MCR.MDIS 置位)选择时钟源。

2.png

图2 FlexCAN的PE时钟结构

4►FlexCAN的协议时序

FlexCAN支持多种方式来设置 CAN 协议所要求的位时序参数。控制寄存器 1(CAN_CTRL1)有各种用于控制位时序参数的字段: PRESDIV、 PROPSEG、 PSEG1、 PSEG2 和 RJW。 CAN 位时序寄存器(CAN_CBT)扩展了 CAN_CTRL1 中 CAN 位时序变量的范围。 CAN_FDCBT 提供了用于 BRS 置位的 CAN FD 帧数据段的位时序变量。

CAN FD 使能时,应始终置位 CAN_CBT.BTF 或 CAN_CTRL2.BTE,并在 CAN_CBT 中配置CAN 位时序变量。

PRESDIV字段(及其扩展范围 EPRESDIV 和用于 CAN FD 报文数据段的 FDPRESDIV)定义了

串行时钟(Sclock)的预分频(见下列方程)。串行时钟的周期定义了用于构成 CAN 波形的时间单位 Tq(Time Quantum)。 Tq 为 CAN 引擎所能处理的最小时间单元。

3.png

比特率定义了接收或传输 CAN 报文的速率,公式如下:

4.png

FlexCAN的位时间可细分为三个部分:

  • 同步段(SYNC_SEG)

    1Tq 的固定长度;信号边沿出现在该段内。

  • 时间段 1

    包括 CAN 标准的传播段和相位段1。该段可通过设置 CAN_CTRL1 寄存器的PROPSEG和PSEG1 字段来编程,其总和(+2)为 2 ~ 16Tq。当 CAN_CBT.BTF 被置位时,FlexCAN 使用来自 CAN_CBT 寄存器的EPROPSEG和EPSEG1 字段,其总和(+2)为 2~ 96Tq 。对于BRS置位的CAN FD报文,FlexCAN使用CAN_FDCBT寄存器的FDPROPSEG 和 FDPSEG1 字段,其总和为 2 ~ 39Tq。

  • 时间段 2

    CAN 标准的相位段2。该段可通过设置CAN_CTRL1寄存器的PSEG2字段来编程,其值(+1)为 2 ~ 8Tq。当CAN_CBT.BTF被置位时, FlexCAN使用来自CAN_CBT寄存器的EPSEG2字段,其值(+1)为 2 ~ 32Tq。对于BRS置位的 CAN FD 报文, FlexCAN使用CAN_FDCBT寄存器的FDPSEG2字段,其值(+1)为 2 ~ 8Tq。时间段2不能小于信息处理时间(IPT),IPT 在 FlexCAN 中为 2Tq。

  • 注意事项:

    FPRESDIV 定义了 BRS 置位的 CAN FD 帧数据比特率部分的PE时钟频率和串行时钟(Sclock)频率之间的比率。 Sclock 周期定义了CAN FD协议数据比特率的 Tq。Sclock 频率 = PE 时钟频率 /(FPRESDIV + 1)注:为避免处理FD帧时出错, FPRESDIV 和PRESDIV(CAN_CBT 或 CAN_CTRL1)请使用相同的值。FPRESDIV 只能在冻结模式下写入,其他模式下被硬件锁定。

如下图3所示为FlexCAN位时间内的段使用 CAN_CTRL1位时序变量的经典 CAN 格式。

5.png

图3

如下图4所示为FlexCAN FD位时间内的段,使用CAN FD格式的CAN_CBT和CAN_FDCBT位时序变量,其中FlexCAN FD的仲裁段使用经典CAN格式配置位时间,即使用CAN_CBT位时序变量用于配置仲裁段的位时间,FlexCAN FD的可变速率的位时间使用CAN_FDCBT位时序变量配置。

6.png

图4

FlexCAN的语法说明如下表1所示:

7.png

表1

当采用CAN位作为持续时间的衡量标准时(例如,评估报文中的CAN位事件),一个 CAN 位的外设时钟个数(NumClkBit)为:

8.png

其中:

  • NumClkBit 为一个 CAN 位的外设时钟个数

  • fSYS 为系统(CHI)时钟频率,单位 Hz

  • PSEG1 为 CAN_CTRL1.PSEG1 的值

  • PSEG2 为 CAN_CTRL1.PSEG2 的值

  • PROPSEG 为 CAN_CTRL1.PROPSEG 的值

  • PRESDIV 为 CAN_CTRL1.PRESDIV 的值

上述公式也适用于 CAN 位时序寄存器(CAN_CBT)所述的 CAN 位时间变量。

因此,FlexCAN FD仲裁段使用经典CAN位的速率计算公式为:

9.png

FlexCAN FD可变速率数据段的计算公式为:

10.png

  • fCANCLK为PE时钟,单位Hz

  • BITRATEN是由CAN 标称位时间变量计算出的 CAN 位速率,单位bps

  • BITRATEF是由CAN 数据位时间变量计算出的CAN位速率,单位bps

  • EPSEG1为CAN_CBT.EPSEG1的值(也可使用 CAN_CTRL1.PSEG1)

  • EPSEG2 为 CAN_CBT.EPSEG2 的值(也可使用 CAN_CTRL1.PSEG2)

  • EPROPSEG 为CAN_CBT.EPROPSEG 的值(也可使用 CAN_CTRL1.PROPSEG)

  • EPRESDIV 为CAN_CBT.EPRESDIV 的值(也可使用 CAN_CTRL1.PRESDIV)

那么CAN FD帧标称比特率相应的每个CAN位的外设时钟数量CPCBN为:

11.png

CAN FD 帧数据比特率相应的每个CAN位的外设时钟数量CPCBF为:

12.png

因此在已知FlexCAN FD时钟和预分频系数以及波特率的情况下可以计算出FlexCAN FD的标称位时间TqN总数和可变速率数据位时间TqF总数,计算公式分别如下所示:

fcanclk / BITRATEN x (EPRESDIV+1) = [1+(EPSEG1+1)+(EPSEG2+1)+(EPROPSEG+1)]

fcanclk / BITRATEF x (FPRESDIV+1) = [1+(FPSEG1+1)+(FPSEG2+1)+FPROPSEG]

根据以上FlexCAN FD的位时序可知可以分别根据标称位时间TqN总数和可变速率数据位时间TqF总数分别计算出其标称位时间的采样点和可变速率数据位时间的采样点,即FlexCAN FD标称位时间的采样点的计算公式为:

FlexCAN_samplepoint = (SYNC_SEG+(EPROPSEG+1) +(EPSEG1+1) )/ (SYNC_SEG+(EPROPSEG+1) +(EPSEG1+1)+ (EPSEG2+1))

FlexCAN FD可变速率位时间的采样点的计算公式为:

FlexCAN_FDsamplepoint = (SYNC_SEG+FPROPSEG+(FPSEG1+1) )/ (SYNC_SEG+FPROPSEG+(FPSEG1+1)+ (FPSEG2+1))

5►FlexCAN FD位时间采样点的计算

根据以上4章节FlexCAN的位时间描述以及FlexCAN FD位时间和采样点的计算公式推导,在给定FlexCAN FD时钟和波特率以及分频系数的情况下,可以使用FlexCAN的库函数通过循环遍历的方式实现自动计算FlexCAN FD的位时间的采样点。

FlexCAN FD库函数定义的协议时序代码如下所示:

typedef struct _flexcan_timing_config {
    u16 preDivider;                  /*!< Clock Pre-scaler Division Factor. */
    u8 rJumpwidth;                   /*!< Re-sync Jump Width. */
    u8 phaseSeg1;                    /*!< Phase Segment 1. */
    u8 phaseSeg2;                    /*!< Phase Segment 2. */
    u8 propSeg;                      /*!< Propagation Segment. */
    /*!< FlexCAN has flexible data rate. */
    uint16_t fpreDivider;          /*!< Fast Clock Pre-scaler Division Factor. */
    uint8_t frJumpwidth;            /*!< Fast Re-sync Jump Width. */
    uint8_t fphaseSeg1;             /*!< Fast Phase Segment 1. */
    uint8_t fphaseSeg2;             /*!< Fast Phase Segment 2. */
    uint8_t fpropSeg;               /*!< Fast Propagation Segment. */
} flexcan_timing_config_t;*/


FlexCAN FD标称位时间采样点和可变速率采样点的位时间的计算,可以通过循环遍历方式实现自动计算,代码如下所示:

bool FLEXCAN_FDCalculateImprovedTimingValues(uint32_t baudRate, uint32_t baudRateFD, uint32_t sourceClock_Hz, flexcan_timing_config_t *pTimingConfig)
{
    bool fgRet = false;
    pTimingConfig->preDivider = 0U;
    pTimingConfig->fpreDivider = 0U;
    if(FLEXCAN_CalculateImprovedTimingValuesByFDCBT(baudRateFD, sourceClock_Hz, pTimingConfig))
    {                                                                                          
        if(FLEXCAN_CalculateImprovedTimingValuesByCBT(baudRate, sourceClock_Hz, pTimingConfig))
        {
            fgRet = true;
        }
    }

    return (fgRet);
}        

static bool FLEXCAN_CalculateImprovedTimingValuesByFDCBT(uint32_t baudRate, uint32_t sourceClock_Hz, flexcan_timing_config_t *pTimingConfig)
{
    uint32_t clk;                      /* the clock is tqNumb x baudRateFD. */
    uint32_t tqNum;                    /* Numbers of TQ. */
    bool fgRet = false;
    tqNum = FDCBT_MAX_TIME_QUANTA;
     /*  Auto Improved Protocal timing. */
    do
    {
        clk = baudRate * tqNum;

        if (clk > sourceClock_Hz)
        {
            continue;                  /* tqNum too large, clk has been exceed sourceClock_Hz. */
        }
        if ((sourceClock_Hz / clk * clk) != sourceClock_Hz)
        {
            continue;                  /* Non-supporting: the frequency of clock source is not divisible by target baud rate, the user
                                          should change a divisible baud rate. */
        }
         /* Make sure the new calculated divider value is greater than the previous one. */
        if (pTimingConfig->fpreDivider > ((uint16_t)(sourceClock_Hz / clk) - 1U))
        {
            continue;
        }
        else
        {
            pTimingConfig->fpreDivider = (uint16_t)(sourceClock_Hz / clk) - 1U;
        }
        if (pTimingConfig->fpreDivider > MAX_FPRESDIV)
        {
            break;                     /* The frequency of source clock is too large or the baud rate is too small, the pre-divider could
                                          not handle it. */
        }
         /* Try to get the best timing configuration. */
        if (FLEXCAN_FDGetSegmentswithBRS(baudRate, tqNum, pTimingConfig))
        {
            fgRet = true;
            break;
        }
    }
    while(--tqNum >= FDCBT_MIN_TIME_QUANTA);

    return (fgRet);
}

static bool FLEXCAN_FDGetSegmentswithBRS(uint32_t baudRatebrs, uint32_t tqNum, flexcan_timing_config_t *pTimingConfig)
{
    uint32_t ideal_sp;
    uint32_t p1;
    bool fgRet = false;

     /* get ideal sample point. */
    if (baudRatebrs >= 1000000U)  
    {
        ideal_sp = IDEAL_SP_LOW;
    }
    else if (baudRatebrs >= 800000U)
    {
        ideal_sp = IDEAL_SP_MID;
    }
    else
    {
        ideal_sp = IDEAL_SP_HIGH;
    }

     /* distribute time quanta. */
    p1 = tqNum * (uint32_t)ideal_sp;
    pTimingConfig->fpropSeg = (uint8_t)(p1 / (uint32_t)IDEAL_SP_FACTOR - 2U);

    if (pTimingConfig->fpropSeg <= (MAX_FPSEG1 + MAX_FPROPSEG))
    {
        if (pTimingConfig->fpropSeg > MAX_FPROPSEG)
        {
            pTimingConfig->fphaseSeg1 = pTimingConfig->fpropSeg - MAX_FPROPSEG;
            pTimingConfig->fpropSeg   = MAX_FPROPSEG;
        }
        else
        {
            pTimingConfig->fphaseSeg1 = 0;
        }

        if(pTimingConfig->fphaseSeg1 <= MAX_PSEG1)
        {
            if ((pTimingConfig->fpropSeg + pTimingConfig->fphaseSeg1) < ((uint8_t)tqNum - 3U))
            {
                pTimingConfig->fphaseSeg2 = (uint8_t)tqNum - (pTimingConfig->fphaseSeg1 + pTimingConfig->fpropSeg + 3U);

                if (pTimingConfig->fphaseSeg2 <= MAX_PSEG2)
                {
                    if ((pTimingConfig->fphaseSeg1 < pTimingConfig->fphaseSeg2) && (pTimingConfig->fpropSeg > (pTimingConfig->fphaseSeg2 - pTimingConfig->fphaseSeg1)))
                    {
                        pTimingConfig->fpropSeg  -= (pTimingConfig->fphaseSeg2 - pTimingConfig->fphaseSeg1);
                        pTimingConfig->fphaseSeg1 = pTimingConfig->fphaseSeg2;
                    }

                     /* subtract one TQ for sync seg. */
                     /* sjw is 20% of total TQ, rounded to nearest int. */
                    pTimingConfig->frJumpwidth = ((uint8_t)tqNum + 4U) / 5U - 1U;

                    if (pTimingConfig->frJumpwidth > MAX_FRJW)
                    {
                        pTimingConfig->frJumpwidth = MAX_FRJW;
                    }

                    fgRet = true;
                }          
            }
        }       
    }

    return (fgRet);
}

static bool FLEXCAN_CalculateImprovedTimingValuesByCBT(uint32_t baudRate, uint32_t sourceClock_Hz, flexcan_timing_config_t *pTimingConfig)
{
    uint32_t clk;                      /* the clock is tqNumb x baudRateFD. */
    uint32_t tqNum;                    /* Numbers of TQ. */
    bool fgRet = false;

    tqNum = CBT_MAX_TIME_QUANTA;

     /*  Auto Improved Protocal timing. */
    do
    {
        clk = baudRate * tqNum;

        if (clk > sourceClock_Hz)
        {
            continue;                  /* tqNum too large, clk has been exceed sourceClock_Hz. */
        }

        if ((sourceClock_Hz / clk * clk) != sourceClock_Hz)
        {
            continue;                  /* Non-supporting: the frequency of clock source is not divisible by target baud rate, the user
                                          should change a divisible baud rate. */
        }

         /* Make sure the new calculated divider value is greater than the previous one. */
        if (pTimingConfig->preDivider > ((uint16_t)(sourceClock_Hz / clk) - 1U))
        {
            continue;
        }
        else
        {
            pTimingConfig->preDivider = (uint16_t)(sourceClock_Hz / clk) - 1U;
        }

        /* To minimize errors when processing FD frames, try to calculate the same value for FPRESDIV and PRESDIV (in CBT). */
        if (pTimingConfig->preDivider != pTimingConfig->fpreDivider)
        {
            continue;
        }

        if (pTimingConfig->preDivider > MAX_EPRESDIV)
        {
            break;                     /* The frequency of source clock is too large or the baud rate is too small, the pre-divider could
                                          not handle it. */
        }

         /* Try to get the best timing configuration. */
        if (FLEXCAN_FDGetSegments(baudRate, tqNum, pTimingConfig))
        {
            fgRet = true;
            break;
        }
    }
    while(--tqNum >= CBT_MIN_TIME_QUANTA);

    return (fgRet);
}

FlexCAN FD位时间采样点应用举例,本文示例以MM32F0160的FlexCAN FD外设为例,其中FlexCAN FD的标称波特率为500K,可变速率波特率为2MHz。fCAN的时钟为72MHz,把FlexCAN FD的fCAN时钟,标称波特率500K,可变速率波特率2MHz代入库函数FLEXCAN_FDCalculateImprovedTimingValues分别计算得出FlexCAN FD标称波特率和可变速率波特率的位时间参数如下:

标称波特率的位时间参数:

preDivider = 0x01;

propSeg = 0x34;

phaseSeg1 = 0x08;

phaseSeg2 = 0x08;

rJumpwidth = 0x0E

可变速率波特率位时间参数:

fpreDivider = 0x01;

fpropSeg = 0x07;

fphaseSeg1 = 0x04;

fphaseSeg2 = 0x04;

frJumpwidth = 0x03

注:再同步参数rJumpwidth 和frJumpwidth不参与FlexCANFD采样点的计算

又因为在已知FlexCAN FD时钟和预分频系数,以及波特率的情况下可以计算出FlexCAN FD的标称位时间TqN总数和可变速率数据位时间TqF总数,计算公式分别如下所示:

标称位时间TqN总数:

fcanclk / BITRATEN x (EPRESDIV+1) = [1+(EPSEG1+1)+(EPSEG2+1)+(EPROPSEG+1)]

代入自动计算得出的标称波特率500K的位时间参数,计算出TqN:

TqN = 72000000/500000x(1+1) = 72

可变速率数据位时间TqF总数:

fcanclk / BITRATEF x (FPRESDIV+1) = [1+(FPSEG1+1)+(FPSEG2+1)+FPROPSEG]

代入自动计算得出的可变波特率2MHz的位时间参数,计算出TqF:

TqF = 72000000/2000000x(1+1) = 18

根据以上FlexCAN FD使用库自动计算出的位时间参数,以及标称位时间TqN总数和可变速率位时间TqF总数,可以分别计算出其标称位时间的采样点和可变速率数据位时间的采样点,即FlexCAN FD标称位时间的采样点的计算公式为:

FlexCAN_samplepoint = (SYNC_SEG+(EPROPSEG+1) +(EPSEG1+1) )/ (SYNC_SEG+(EPROPSEG+1) +(EPSEG1+1)+ (EPSEG2+1))

代入标称波特率500K的位时间参数计算标称波特率的位时间的采样点如下:

FlexCAN_samplepoint =(1+(52+1)+(8+1))/(1+(52+1)+(8+1)+(8+1))= 87.5%

FlexCAN FD可变速率位时间的采样点的计算公式为:

FlexCAN_FDsamplepoint = (SYNC_SEG+FPROPSEG+(FPSEG1+1) )/ (SYNC_SEG+FPROPSEG+(FPSEG1+1)+ (FPSEG2+1))

代入可变速率2MHz波特率的位时间参数计算可变速率的位时间的采样点如下:

FlexCAN_FDsamplepoint = (1+7+(4+1))/(1+7+(4+1)+(4+1))= 72%

CAN采样点一般设置在75%—80%之间,具体要根据CAN通信波特率大小配置。当波特率不超过500K时,建议采样点设置在87.5%;当波特率大小在500K—800K之间的时候,建议采样点设置在80%;当波特率大于800K的时候,建议采样点设置在75%。以上建议并不是绝对的,需根据应用环境复杂程度通过调整FlexCAN FD的再同步参数rJumpwidth和frJumpwidth使得phaseSeg1和phaseSeg2以及fphaseSeg1和fphaseSeg2在标称波特率和可变波特率的位时间上前移或后移N(0-15)个Tq值来微调采样点(虽然rJumpwidth和frJumpwidth不参与采样点计算)。

注意事项:

关于采样点的配置的一些额外建议:当用户在实际车用环境中出现FlexCAN无正常收发数据时除了根据错误标志查找问题定位问题外,还可使用专业的CAN诊断仪测试出多节点总线上的rJumpwidth和frJumpwidth,phaseSeg1和phaseSeg2以及fphaseSeg1和fphaseSeg2参数,参考这些位时间参数值来调整适配rJumpwidth和frJumpwidth,phaseSeg1和phaseSeg2以及fphaseSeg1和fphaseSeg2参数到CAN通信的合适的采样点

来源:灵动MM32MCU

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 22

4月12日,本土MC厂商上海灵动微电子股份有限公司(以下简称“灵动微电子”)联合安谋科技高调宣布进入高性能MCU领域,正式发布搭载安谋科技的“星辰”STAR-MC1处理器的MM32F5系列MCU ,据灵动微市场总监王维介绍,该MCU采用Arm v8-M Mainline架构,集成DSP和FPU ,性能高达4.02CoreMark/MHz!

“灵动微杀入高性能MCU领域!推出采用安谋科技“星辰”内核的MM32F5系列!"

王维表示M32F5系列是灵动在高性能MCU上的一个探索,也为其未来整个高性能MCU平台发展起到助力作用。灵动微希望据此系列杀入高端工业互联网应用。

“灵动微市场总监王维"
灵动微市场总监王维

“大家都知道,ST的Cortex-M3从是2007年夏天推出,到现在已经差不多15年了,而NXP也是在2008年左右推出Cortex-M3、M4的MCU,我们今天推出的高性能系列,是对以前M3M4内核MCU的一个升级,我们在同样的主频前提下对MCU的能效升级,能适应目前更多的需求。”王维指出,“目前,ST和NXP也有更高性能的产品系列,例如主频超过500MHz或者更高的产品,它们的架构和总线有新的设计,已经是MPU的层面,通过增加DSP它们也可以做一些人工智能的处理,我们对这些产品还在关注,考虑是否增加DSP架构 ,因为安谋科技有针对机器学习的周易平台,我们还在协商未来的架构。我们的高性能系列会支持本土的操作系统,例如鸿蒙系统、阿里OS或者是RT-Thread等等。当然也支持一些海外的Free RTOS。”

“灵动微杀入高性能MCU领域!推出采用安谋科技“星辰”内核的MM32F5系列!"

王维进一步分析说近年来,人工智能、物联网、工业自动化领域市场发展飞速,特别是安防、民生和智能家居等行业发展迅速,其年增长率超1500%;在疫情后,非接触的人机交互设备以及对于语音和视觉的技术需求增长也越来越快;在过去的三年内,据一些数据统计,国内工业企业的增长率已超过200%,包括常见的工业自动化升级改造。现在国内的工业企业不单是为了满足国内的需要,更占据不少海外的市场份额。

“灵动微杀入高性能MCU领域!推出采用安谋科技“星辰”内核的MM32F5系列!"

“但我们也看到一个非常大的问题,就是虽然过去一两年整个国产MCU市占率比三年五年前提高了很多,但在高性能MCU领域,本土市占率还是很低的,甚至低于处理器行业国产化率占比,主要原因是在处理器领域,整个架构和生态相对来比较完整,但在MCU领域,架构分散,生态碎片化、算法优化难易程度不同,所以目前高性能MCU领域还是以欧美厂商产品为主,所以灵动微电子经过严谨的评估后选用了安谋科技Armv8-M Mainline架构的“星辰”STAR-MC1内核来开发高性能MM32F5系列MCU产品。”王维强调。

“灵动微杀入高性能MCU领域!推出采用安谋科技“星辰”内核的MM32F5系列!"

为何选用安谋科技星辰STAR-MC1处理器内核?

“灵动微杀入高性能MCU领域!推出采用安谋科技“星辰”内核的MM32F5系列!"

“灵动微杀入高性能MCU领域!推出采用安谋科技“星辰”内核的MM32F5系列!"

安谋科技CPU产品总监陈江杉指出从上图可以看出,实际上,ARM Cortex-M3,M4内核都是基于ArmV7架构,而安谋科技的“星辰”STAR-MC1内核则是基于Armv8-M Mainline架构,这两者在架构上是不同的。

据介绍,相对于Arm Cortex-M4,在同等工艺和功耗前提下“星辰”STAR-MC1内核有约20%的性能提升,Cortex-M4的MIPS是1.15DMIPS/MHz,“星辰”STAR-MC1内核能做到1.5 DMIPS/MHz & 4.02 Coremark/MHz;

“灵动微杀入高性能MCU领域!推出采用安谋科技“星辰”内核的MM32F5系列!"

此外,“星辰”STAR-MC1处理器搭载了接近Cortex-M7的内存系统总线结构,并且具备v8M独有的可定制指令接口,可以灵活地去定制用户特定指令,以提升系统效率。同时,客户也可以用这套机制去做一些差异化,来保证自己的知识产权;

还有,“星辰”STAR-MC1处理器的生态系统不仅有Arm自家的DS和Keil MDK工具,也包含第三方的IAR、SEGGER、Lauterbach等一些工具链。“星辰”STAR-MC1处理器在各类第三方编译器、操作系统、仿真器也受广泛支持,便于工程师在开发设计时快速上手。

“‘总结一下就是星辰’STAR-MC1处理器着重解决了三个问题,第一个是安全,信息安全trust zone这个技术可以提升整个系统级别的这个安全处理能力,提供更全面的一个内存保护的机制。其次是高效计算,“星辰”处理器的设计目标是一个性能功耗均衡的配置,相对于M4,它会有大概20%的性能提升。第三是灵活的扩展接口。”他强调。“此外,我要强调,我们内部请法务专家做了评估,这个“星辰”处理器美国所占技术比例不到10%,所以可以满足本土厂商的需求。”

“灵动微杀入高性能MCU领域!推出采用安谋科技“星辰”内核的MM32F5系列!"

他表示目前“星辰”处理器产品和生态日益完善,已经有超过70个授权,有60多个Design-IN,截止2021年年底整体出货超过一亿颗!

此外他表示“星辰”处理器也是面向全球提供,其在信息安全等级上较高,已经被中国客户广泛接受,希望可以广泛应用到嵌入式领域。

灵动的MCU布局与MM32F5系列介绍

“灵动微杀入高性能MCU领域!推出采用安谋科技“星辰”内核的MM32F5系列!"

王维表示近两年来,随着MCU需求暴涨,全球MCU产能紧张,为了稳定供货提升产能,灵动微从去年11月开始,率先将MCU从8寸晶圆向12寸晶圆迁移,另外就是从11月开始,保持每月发布一款新产品的速度。去年年底灵动微已经发布了针对汽车、电机应用的产品系列,这次是新内核新架构,五月灵动微还有新品发布!

“灵动微杀入高性能MCU领域!推出采用安谋科技“星辰”内核的MM32F5系列!"

本次灵动微发布了高性能MM32F5系列平台中,它有三个系列的规划布局:

“灵动微杀入高性能MCU领域!推出采用安谋科技“星辰”内核的MM32F5系列!"

MM32F52系列,120MHz“星辰”处理器,主流升级、MM32F53系列,150MHz“星辰”处理器,产能扩充、MM32F55系列,200MHz“星辰”处理器,应用拓展。

这三个系列构成了灵动在今后高性能平台上的主线,面向日益智能化的嵌入式系统需要。

王维表示灵动微的F5系列采用了专用的内存子系统以及高并发总线设计。

“灵动微杀入高性能MCU领域!推出采用安谋科技“星辰”内核的MM32F5系列!"

“在我们芯片的整个外设设计、模块设计上面,可以帮助拓展到更多新型应用。”他强调,“我们的研发团队还独创了一些专业模块,例如在这个F5系列里面,我们首次加入了MindSwhich这样一个专门模块,这个模块其实可以在任意的外设和GPIO之间实现独立互联,客户可以通过这个独立互联结合我们多路组合逻辑处理单元,在不需要CPU干预的情况下面可以完成更多操作处理。”

“灵动微杀入高性能MCU领域!推出采用安谋科技“星辰”内核的MM32F5系列!"

他表示灵动将会在本季度双首发两款MM32F52系列产品,分别是MM32F5270和MM32F5280,其主要差别是存储容量及部分外设配置,对于内核、高级通信接口等功能两款产品是一致的。

“灵动微杀入高性能MCU领域!推出采用安谋科技“星辰”内核的MM32F5系列!"

MM32F5系列配套软硬件平台

据介绍,作为灵动的一款全新的高性能MCU系列,灵动同步发布配套的新的软硬件平台。在开放评估板上,灵动推出了面向MM32F系列的Plus Board,为用户提供更全面的评估开发体验。主要的接口功能都能在一块开发板上进行评估,如以太网、USB、FlexCAN、SD卡、选配的LCD彩屏显示、舵机接口、传感器模块等。

“灵动微杀入高性能MCU领域!推出采用安谋科技“星辰”内核的MM32F5系列!"

在软件上,灵动新推出MindSDK开发套件,包含驱动程序、功能组件、样例工程及演示工具等。从整个MindSDK组成来说,除了提供相应的兼容CMSIS-Core和CMSIS-DSP的架构外,还会提供专门的基于HAL或是基于操作系统层面的软件驱动,以及对应的样例工程和丰富的集成化参考设计。在软件的驱动程序案例库里,除了基本的调用,还会针对中断方式或者DMA等方式来提供样例。随着智能化的需求增多,电子系统的设计日益复杂化,软件的功能和复杂程度将会越来越大,灵动新推出的MindSDK开发套件可以解决这些问题,满足高性能系统的开发需求。

“灵动微杀入高性能MCU领域!推出采用安谋科技“星辰”内核的MM32F5系列!"

MM32F5作为一个通用高性能的MCU平台,对于不同的应用场景和项目需要,客户可以从中选择所需的功能接口。同时,灵动也提供不同封装形式如64,100和144pin,以及-40~105℃的扩展工业级产品选项供客户选择。若要了解更多关于灵动MM32F5产品的信息,请登录灵动官网查看:

“灵动微杀入高性能MCU领域!推出采用安谋科技“星辰”内核的MM32F5系列!"

他透露5月灵动微将发布一款低功耗产品,以“低功耗和全新应用”为亮点,这将是一款什么产品?我们拭目以待吧!(完)

来源:电子创新网张国斌
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 79

中国深圳2020年11月4日讯:

灵动微电子在慕尼黑华南电子展宣布正式启用四位数字命名规则来命名全新的MCU系列,并推出基于32位Arm Cortex-M的入门级MCU MM32F0010系列。这是一款适用于8位/16位单片机升级、支持工业级(-40℃ ~ 85℃)和扩展工业级(-40℃ ~ 105℃)温度规格的MCU;面向节点控制、无线充电、电机控制、智能玩具、照明电源、应急消防等领域。

MM32F0010在性能、功耗和外设配置方面具有显著的特点,其中包括:

  • 提供高达48MHz的CPU运行频率,在国产小封装Cortex-M0 MCU中处于领先地位
  • 2.0 – 5.5V 宽压设计,适用于各种电源供电的应用场合
  • 在20pin封装产品上,支持多达18个GPIO,为用户提供充分可用引脚资源
  • 内置死区控制定时器的小封装产品,满足中高性能入门级电机应用需要


产品供货情况和支持

MM32F0010提供TSSOP20和QFN20两种封装形式,以及可选的工业级和扩展工业级型号。随芯片同时发布MM32F0010的官方开发套件:eMiniBoard MB-032。主流开发设计工具和编程器厂家也已实现对MM32F0010的支持。

MM32F0010芯片已批量供货。有关芯片购买事宜,请洽灵动微电子的官方代理商和方案设计公司。

更多详细信息,请访问 www.mm32mcu.com

关于灵动

灵动微电子成立于2011年,是中国本土领先的通用32位MCU产品及解决方案供应商。公司基于Arm Cortex-M系列内核开发的MM32 MCU产品拥有F/L/SPIN/W/P五大系列,200多个型号,累计交付近亿颗,在本土通用32位MCU公司中位居前列。MM32 MCU被广泛应用于汽车电子、工业、电机、家电、医疗、消费玩具、手机平板周边、显示及交互等领域,每年都有数千万件配备了灵动微电子MM32 MCU的优秀产品交付到客户手中。

迄今为止,灵动微电子是同时获得了Arm-KEIL、IAR、SEGGER国际权威组织官方支持的本土MCU公司,是为数不多的建立了独立、完善的生态体系的通用MCU公司,可以为客户提供从优异芯片产品到核心算法、从完备参考设计方案到整机开发的全方位支持,真正为中国电子信息产业提供底层技术驱动和支持。

来源:灵动MM32MCU(微信号:MindMotion-MMCU)

围观 135

作者:张国斌

近两年来,随着电子产品智能需求提升,通用类MCU需求暴涨,去年,ST MCU接单接到手麻,但今年,随着市场回归理性,意法半导体MCU出货量都下降了,那国产MCU的出货有什么变化呢?

12月20日,业界知名技术盛会ELEXCON2018深圳国际电子展在深圳会展中心1/2/9号馆隆重开幕,众多嵌入式厂商如ST、华大半导体、灵动微等携最新嵌入式方案参展,电子创新网专访了灵动微电子MCU事业部总经理娄方超先生,请他分享了国产通用MCU出货情况。

娄方超表示智能应用激发了MCU的大量需求,例如仅仅一个智能门就需要三颗MCU如果需要实现无线控制,还需要能支持无线蓝牙的的MCU。

而对于下面的低阶机器人来说,就需要23颗MCU ,高阶机器人需要30多颗MCU,此外如果需要机器人有表情,则需要更多MCU,还有如果机器人融入更多情绪功能则需要的MCU还会更多。

他还以今年火热的电子积木为例--其实就是为STEAM 教育设计的可编程电子积木平台,每个模块有颗MCU,这个电子积木通过UART接口实现了模块之间的连接,通过连接可以实现电子琴、尤克里里等功能,这一个简单电子积木套装售价39美元。

他表示经过几年的布局,灵动微目前在电机控制领域已经有所收获了,“电机控制市场是个长尾市场,要做好一个好的电机控制方案并不容易,我们的电机方案已经被很多大家电企业采用。”他指出,“这是一个破壁机方案,破壁机可以理解为大功率搅拌机。可打碎细胞壁,高需求的破壁机采用无刷电机,更大程度降低破壁机的噪音,增加电机的使用寿命, 此外,无刷直流电机还有高效节能的优势,自配控制板,实现智能控制。”

他表示,灵动微的方案还被大功率设备采用,例如如下的电动摩托车方案,可以实现120公里时速,还有被油烟机、工业风机采用的。


在今年8月29日的“2018灵动MM32协作大会”上,灵动微宣布灵动微所有MM32 MCU架构都将升级,得益于内核架构的升级优化,内核综合性能提升50%以上。而且随着内核架构的升级,MM32 MCU功耗大幅优化,以停机功耗为例,最新一代内核产品较上一代降低90%以上。娄方超称新架构MCU让用户购买价格低10% ,而性能提升10% 功耗下降 10%!

例如采用新架构的精简型Cortex-M0产品--MM32F003系列,该系列是目前市面上主频最高、性能最好的“003”类产品,同时还可以提供QFN20 3x3超小高密度封装。“我们一方面从设计、架构、封装提升产品品质,另外不断拓展应用,我们的每代产品都有改进和提升,因此客户的粘性很高。”他强调。“我们一直都在考虑如何让客户开发能实现盈利的好产品。”

当然传统市场灵动微有也没有放弃例如在无线充电领域,灵动微就开发出指甲大小的方案,在电子烟领域,灵动微也有更新的方案。

展望未来,娄方超表示近期经济大环境的变化给灵动微这样的公司带来的新的机遇,“以前很多大公司根本不搭理我们,现在他们都在主动联系我们。”他透露,“例如一家很大的国外系统公司就主动找到我们,引入我们的方案,以推动他们的变革,以前的很多公司发展依赖国运,不用思考就能挣钱,现在不行了,只有那些能思考能积极变革的公司才有机遇。所以我们对灵动微的未来充满信心!”

很多客户来灵动展位交流

声明:本文为原创文章,转载需注明作者、出处及原文链接,否则,本网站将保留追究其法律责任的权利

围观 551

有客户需要用到MM32L073,需要通过IAP进行固件升级,在FLASH里面要烧录两份代码:一个Boot loader,一个用户应用程序。在开发应用程序时,使用中断函数不能相应中断。

在开发IAP的用户应用程序时,必须得重新映射中断向量表,中断向量表即某个中断服务程序的入口地址的集合。

在Cortex-M3内核的MCU上可以通过设置SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET;该寄存器的值来实现中断向量表的重定义。但用户反馈在MM32L0xx系列以Cortex-M0为内核的单片机中却怎么也找不到这个设置中断向量表的寄存器,用户可以通过以下方法来实现中断向量表重定义。

实现方法基本思想:

1、将中断向量表放入到RAM的起始地址(只需要在应用程序中保留RAM起始地址的0x100大小不使用即可)。
2、在bootload中将应用程序的中断向量表从Flash中拷贝到RAM中。
3、设置MM32L073中断向量表位于RAM中。

MM32 IAP中断向量表重定义

0x20000000是SRAM的起始地址,0x08010000是应用程序的起址地址,从0x08010000开始的字节,存放应用程序的中断向量表。

应用程序代码及自身中断矢量表存放在离0X08000000加某个地址偏移量的地方,即从0x08000000+偏移量的地址开始存放APP代码及中断矢量。这个偏移量要大于IAP的程序空间,防止程序覆盖重定义的中断向量表的数据。在本程序中的偏移量为0x10000,即APP程序的起始地址为0x08010000。

当应用程序发生中断时,内核就从地址0x00处的向量表取相应中断的入口地址,即相当于从0x20000000处的向量表取中断入口地址,当然也相当于从0x08010000处的向量表取中断入口地址,然后去执行相应中断程序。

可以根据startup_MM32L0xx.s的中断函数的入口地址数计算需要预留的空间大小。

MM32 IAP中断向量表重定义

如上图所示,每一个DCD都代表一个中断向量。
例如:
DCD WWDG_IRQHandler ; Window Watchdog
“WWDG_IRQHandler "其实就是WWDG中断服务函数WWDG_IRQHandler的入口地址。

中断向量的集合定义了一张中断向量表,这张表包括48个元素,每个元素是一个长度为4字节的地址。除了第一个地址是SP(堆栈指针)外,其它的地址都是某个中断服务程序的入口地址。中断向量表的所占内存大小为48*4=180(0xC0)个字节。

转自: 灵动MM32

围观 1388

(2016年8月23日深圳)今天,上海灵动微电子股份有限公司在深圳成功举办2016年秋季新品发布会,众多MCU领域的知名厂商代表、专业人士以及国内30多家知名门户与科技媒体云集现场,共同见证灵动微电子新品发布,灵动微电子董事长兼CEO吴忠洁博士、灵动微电子MCU事业部总经理娄方超先生、ARM 物联网应用市场经理耿立锋先生以及云汉芯城产品副总裁程凯先生等嘉宾还给大家带来了精彩的演讲,并与现场观众一起分享交流经验,共同探讨本土MCU如何突破形成大发展势态。

活动主持人电子创新网CEO张国斌在开场致辞中指出,随着物联网和智能硬件的快速发展,32位MCU的需求呈现快速上升趋势。据相关数据统计,2015年全球MCU出货量255亿颗,比2014年提升了12.4%。虽然今年全球的经济相对低迷,但是MCU的需求仍然有望增长20%左右,预计2016年全球MCU市场出货量将突破300亿颗大关,其中32位MCU市场未来几年会保持30%左右的高速增长!在这一大背景下,本土MCU厂商必然强势崛起,重演PC、手机、汽车领域发展格局。

灵动微电子董事长兼CEO吴忠洁博士详细介绍了灵动微电子多年来的发展历程,强调灵动微电子多年来一直专注MCU设计,并表示灵动微电子给用户提供“保姆式”的服务,灵动微的愿景是要成为中国本土MCU第一推动力。

灵动微电子MCU事业部总经理娄方超先生在演讲中宣布灵动微电子三款新品,它们分别是则是基于Cortex-M3内核的MM32F103系列MCU,基于Cortex-M0内核的MM32F031系列MCU和MM32P011系列的MCU,其中MM32F031系列MCU有突出的性价比特性,主打IoT及消费类市场。他通过数据的分析对比展示了这几款新品的强大优越性能以及其相关的应用领域。”我们的MCU采用的是国际领先的封测供应商的封测服务,这表明灵动对MCU产品品质和可靠性有着严格的要求。”他举例说。

他还揭秘了灵动微电子MCU的十大构成要素,详细介绍了灵动微电子提供的开发套件、调试工具和技术支持服务,并分享了灵动微电子技术的发展路线图。他表示灵动微电子未来会逐步推出支持超低功耗、无线连接的MCU产品系列,在制造工艺上也会过渡到55nm,甚至40nm节点。

作为灵动微电子的重要合作伙伴,ARM物联网应用市场经理耿立锋先生也到场,并发表了以《ARM助力国产MCU腾飞》为主题的演讲,他从工具、生态系统建设、商业模式等各个发展介绍了ARM如何更好地与本土公司合作,并以奥运冠军中国女排中的外国队医形象地比喻ARM与灵动微电子的合作。

好的产品离不开好的渠道,此次灵动微电子渠道合作伙伴云汉芯城也来到现场。云汉芯城产品副总裁程凯发表了以《云汉芯城,打造电子产业第一服务平台》为主题的演讲,详细介绍了云汉芯城独特的服务模式,并表示大数据显示本土MCU受到更多关注。

灵动微电子的方案合作伙伴深圳蚁石(OCTANT)科技有限公司总经理朱才智发表了《多旋翼飞行器的发展、机会和挑战》的主题演讲,他表示,多旋翼飞行器的算法需求加大,未来基于Cortex-M3 MCU方案将走热。

在最后的圆桌论坛环节中,演讲嘉宾以及周立功单片机创始人周立功、南京万利电子创始人刘强、深圳智慧家庭协会秘书长蔡锦江等与观众面对面互动,为灵动微电子的发展出谋划策。

大家一致认为本土MCU在未来的发展机遇很大,要抓住发展机遇就要专注细分领域一战成名!周立功教授还结合自己的经验指出灵动微电子要提供其他厂商不能提供的差异化服务,超越客户预期,并要放眼未来,提供前瞻性的方案。

蔡锦江则表示,随着中国厂商具备物联网架构的定义能力,本土公司面临绝佳的发展机遇。

娄方超表示MCU市场潜力巨大,未来几年物联网就有近千亿颗的MCU需求,面对如此巨大的市场,灵动微电子将以高品质高可靠的产品以及高质量的服务和开放的精神赢得用户!

灵动微电子还将在24日到26日开幕的深圳国际嵌入式展展出新品和方案,欢迎业者观摩交流,展位号:三号馆3B38,这是今天展示的部分方案。

围观 498
订阅 RSS - 灵动微