发新帖本帖赏金 100.00元(功能说明)我要提问
12下一页
返回列表
打印
[MM32生态]

MM32F3270通讯板之硬件设计与调试 & FatFs文件系统移植与演示

[复制链接]
2378|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 xld0932 于 2022-4-27 14:52 编辑

#申请原创#   @21小跑堂


介绍
MM32F3270系列是灵动在2021年3月中旬发布的一款全新的主流MCU型号。MM32F3270系列使用高性能的ARM Cortex-M3作为内核,最高工作频率可以达到120MHz,带有512KB的FLASH和128KB的SRAM,具有2.0V~5.5V的宽工作电压和-40℃~105℃的宽工作温度,并配有丰富的外设,适用于要求高集成度的高性能控制领域,如工业控制、安防监控、家电领域、通讯等应用。

功能
MM32F3270系列MCU配有丰富的外设,支持多达8路的UART、1路CAN接口、3路SPI/I2S接口等等;其中UART还支持红外IrDA、智能卡、多机通讯、波特率自动检测、LIN通讯等功能。本文主要结合CAN、SPI和UART这3个外设功能来实现CAN通讯、RS-232通讯、RS-485通讯、LIN Master和LIN Slave通讯、以及SPI读写TF卡操作的功能;通过SPI对TF卡底层的操作,结合开源的FatFs0.14b,来实现对TF卡的文件管理系统。

硬件原理图设计
MM32F3270系列MCU支持2.0V~5.5V的宽范围工作电压,所以整个系统的电源我们使用MiniUSB接口进行供电,通过LDO(ASM1117-3.3V)将USB的5.0V电源转变成3.3V的系统工作电压,使用JTAG接口对芯片进行程序烧录和调试,同时还支持SWD接口模式。支持按键复位的复位电路,支持按键切换的BOOT模式选择,以及MCU电源旁路电容、RTC和MCU时钟晶振电路,组成了MM32F3270的最小工作系统。

MM32F3270系列MCU带有一路CAN接口,我们使用SN65HVD230DR作为外部CAN收发器,终端电阻通过两个60欧姆串联再并一个电容到地的连接方式,可以增加系统的稳定性和抗共模干扰的能力,并在CAN_H和CAN_L端增加了ESD防护。

MM32F3270系列MCU带有8路UART,我们使用其中一路连接CH340芯片,通过USB转UART来实现程序在运行过程中的调试信息交互;其中一路通过连接SP3232ECY芯片来实现RS-232的收发电路;其中一路通过使用TP8485E芯片来实现RS-485的收发电路,同时将UART的TX引脚通过SN74LVC1G14DBVR反相器连接到RE和DE引脚上,实现RS-485的硬件自动收发控制电路,在AB两端放置了120欧姆的终端电阻以及相应的防护器件,可以达到ESD三级防护效果;另外两路通过TJA1021T芯片结合不同外围应用电路来分别实现LIN主机和LIN从机的通讯电路。

具体原理图参考设计如下图所示:

硬件PCB绘制
PCB的绘制使用了立创EDA设计软件,对于习惯使用AD的小伙伴来说,立创EDA软件上手相当容易;软件易于操作,可以将原理图转换成PDF或者图片格式,可以自动生成BOM表,在立创商场上购买元器件、可以将绘制好的PCB用2D或者3D的效果承现出来,通过DRC检测生成Gerber生产文件,在嘉立创直接下单打样PCB板子。

回板焊接调试
需要注意的是整个板子的系统工作电压是3.3V,所以在调试LIN通讯功能的时候,VBAT是需要外接电源供电的,在LIN主从机接口上已经预留了VBAT引脚位。

调试底层驱动
我们从官网上下载MM32F3270库函数和例程,将底层库驱动程序提取出来创建一个新工程,在新工程中添加之前的TASK任务调试和LETTER-SHELL开源代码功能,参考官方的CAN、UART、SPI示例程序完成对CAN通讯、RS-232通讯、RS-485通讯以及SPI接口的初始化操作,通过参考MM32F3270的数据手册和用户手册完成了对LIN主机、LIN从机的配置和通讯测试,通过参考TF卡的手册,通过SPI接口完成了对TF卡的初始化以及对块的读写、格式化等操作。在调试过程中我们使用到了TF卡、USB转RS-232线、USB转RS-485线、以及图莫斯的CAN&LIN Analyser调试工具、J-LINK等工具。具体的底层驱动程序可以参考附件中的软件工程源代码。

移植FatFs文件系统
FatFs是一个用于小型嵌入式系统的通用FAT/exFAT文件系统。FatFs软件代码遵循ASCI C(C89)进行编写,与磁盘接口层完全分离。因此它具有很好的移植性,适用于资源有限的微控制器中,也是我们常用的文件系统之一。当前FatFs最新的版本为0.14b,可以到官网上下载得到。对于FatFs文件系统的移植,其实也比较简单,一是配置ffconf.h文件中的宏开关定义,通过这些宏定义来使能或关闭相应的文件系统操作功能;二是移植操作磁盘的底层接口实现,磁盘可以是SPI FLASH、可以是U盘、可以是TF卡等等其它存储介质;我们这里在diskio.c文件中实现相应的功能函数接口,调用的是SPI底层操作TF卡的代码,具体接口函数代码如下所示:
#include "ff.h"                        /* Obtains integer types */
#include "diskio.h"                /* Declarations of disk functions */
#include "config.h"

/*-----------------------------------------------------------------------*/
/* Get Drive Status                                                      */
/*-----------------------------------------------------------------------*/

DSTATUS disk_status (
        BYTE pdrv                /* Physical drive nmuber to identify the drive */
)
{
        return (DSTATUS)TFCARD_Disk_Status();
}



/*-----------------------------------------------------------------------*/
/* Inidialize a Drive                                                    */
/*-----------------------------------------------------------------------*/

DSTATUS disk_initialize (
        BYTE pdrv                                /* Physical drive nmuber to identify the drive */
)
{
        return 0;//(DSTATUS)TFCARD_Disk_Initialize();
}



/*-----------------------------------------------------------------------*/
/* Read Sector(s)                                                        */
/*-----------------------------------------------------------------------*/

DRESULT disk_read (
        BYTE pdrv,                /* Physical drive nmuber to identify the drive */
        BYTE *buff,                /* Data buffer to store read data */
        LBA_t sector,        /* Start sector in LBA */
        UINT count                /* Number of sectors to read */
)
{
        if(TFCARD_Disk_Read(buff, sector, count))
        return RES_PARERR;
    else
        return RES_OK;
}



/*-----------------------------------------------------------------------*/
/* Write Sector(s)                                                       */
/*-----------------------------------------------------------------------*/

#if FF_FS_READONLY == 0

DRESULT disk_write (
        BYTE pdrv,                        /* Physical drive nmuber to identify the drive */
        const BYTE *buff,        /* Data to be written */
        LBA_t sector,                /* Start sector in LBA */
        UINT count                        /* Number of sectors to write */
)
{
        if(TFCARD_Disk_Write(buff, sector, count))
        return RES_PARERR;
    else
        return RES_OK;
}

#endif


/*-----------------------------------------------------------------------*/
/* Miscellaneous Functions                                               */
/*-----------------------------------------------------------------------*/

DRESULT disk_ioctl (
        BYTE pdrv,                /* Physical drive nmuber (0..) */
        BYTE cmd,                /* Control code */
        void *buff                /* Buffer to send/receive control data */
)
{
    DRESULT res = RES_OK;

    switch(cmd)
    {
        case CTRL_SYNC:
            break;

        case GET_SECTOR_COUNT:
            *(WORD *)buff = TFCARD_Disk_Sectors();
            break;

        case GET_SECTOR_SIZE:
            *(WORD *)buff = 512;
            break;

        case GET_BLOCK_SIZE:
            *(WORD *)buff = 1;
            break;

        default:
            res = RES_PARERR;
            break;
    }

    return res;
}


DWORD get_fattime(void)
{
    DWORD ret_val = 0;

    /* 2020-10-12 18:05:10 */
    ret_val = (20 << 25)
            + (10 << 21)
            + (12 << 16)
            + (18 << 11)
            + (05 << 5)
            + (10 /  2);

    return ret_val;
}


FatFs文件系统示例及运行结果
我们这边只是例举了一个简单的功能:预先在TF卡中存放一个HELLO.TXT文件,在芯片上电后运行程序,初始化TF卡及FatFs文件系统,从TF卡中打开并读取HELLO.TXT文件中的内容,在SHELL终端上进行打印输出。

附件
MM32F3270数据手册: DS_MM32F3270_SC.pdf (3.16 MB)
MM32F3270用户手册: UM_MM32F3270_SC.part1.rar (8 MB) UM_MM32F3270_SC.part2.rar (6.38 MB)
原理图及元件表: Schematic_MM32F3270_COMM 2021-11-09_2022-04-27.pdf (347.72 KB) BOM_MM32F3270_COMM 2021-11-09_2022-04-27.zip (2.28 KB)
Gerber产生文件: Gerber_PCB_MM32F3270_COMM.zip (185.51 KB)
软件工程源代码: Template.zip (2.73 MB)

后续
在后面会基于这套硬件环境,根据每一个接口的应用做相应的内容分享帖子。那为什么第一篇就要移植FatFs文件系统呢?那是因为在后面的分享帖中需要使用到哈

使用特权

评论回复

打赏榜单

21小跑堂 打赏了 100.00 元 2022-04-27
理由:原理图完整清晰,成品美观,移植FatFs文件系统,期待后续原创更新。

沙发
xld0932|  楼主 | 2022-4-27 15:54 | 只看该作者
硬件上实现CAN、RS-232、RS-485、SPI TF卡、LIN主机、LIN从机以及MM32F3270最小系统的电路设计,完成了对底层硬件驱动程序的初始化验证,为后续功能分享实现了FatFs文件系统的移植和示例演示。

使用特权

评论回复
板凳
www5911839| | 2022-4-27 16:33 | 只看该作者
大侠,【MM32+模块】系列停更了啊

使用特权

评论回复
地板
xld0932|  楼主 | 2022-4-27 16:54 | 只看该作者
www5911839 发表于 2022-4-27 16:33
大侠,【MM32+模块】系列停更了啊

不会停更的因为DIY的板子前后周期比较长,所以会优先所以DIY板子先分享;空闲之余会继续【MM32+模块】系列分享

使用特权

评论回复
5
www5911839| | 2022-4-27 19:37 | 只看该作者
xld0932 发表于 2022-4-27 16:54
不会停更的因为DIY的板子前后周期比较长,所以会优先所以DIY板子先分享;空闲之余会继续【MM32+模 ...

期待大作

使用特权

评论回复
6
terryzhouhz| | 2022-4-28 09:14 | 只看该作者
FatFs文件系统。厉害了

使用特权

评论回复
7
xld0932|  楼主 | 2022-4-28 10:44 | 只看该作者
terryzhouhz 发表于 2022-4-28 09:14
FatFs文件系统。厉害了

使用特权

评论回复
8
gyh974| | 2022-4-28 13:59 | 只看该作者
期待后续

使用特权

评论回复
9
xld0932|  楼主 | 2022-4-28 21:21 | 只看该作者

使用特权

评论回复
10
tpgf| | 2022-5-4 13:57 | 只看该作者
通过串口进行通讯的

使用特权

评论回复
11
nawu| | 2022-5-4 14:07 | 只看该作者
通讯的种类好多啊

使用特权

评论回复
12
aoyi| | 2022-5-4 14:17 | 只看该作者
是自己打的板子吗

使用特权

评论回复
13
zljiu| | 2022-5-4 14:41 | 只看该作者
期待楼主的后续哈

使用特权

评论回复
14
gwsan| | 2022-5-4 14:48 | 只看该作者
tf和sd兼容吗

使用特权

评论回复
15
tfqi| | 2022-5-4 14:58 | 只看该作者
这得做多少个模块啊

使用特权

评论回复
16
xld0932|  楼主 | 2022-5-4 21:28 | 只看该作者
tpgf 发表于 2022-5-4 13:57
通过串口进行通讯的

是的,RS232、RS485、以及LIN MASTER和LIN SLAVE都是通过MM32F3270的UART功能来实现的

使用特权

评论回复
17
xld0932|  楼主 | 2022-5-4 21:30 | 只看该作者
aoyi 发表于 2022-5-4 14:17
是自己打的板子吗

是的,原理图和PCB都是用的立创EDA软件,支持国产哈

PCBA部分是由嘉立创投的PCB,立创商场买的元器件,再手工焊接的

使用特权

评论回复
18
xld0932|  楼主 | 2022-5-4 21:31 | 只看该作者

兼容的,这块板子上是放置的TF的卡座

使用特权

评论回复
19
xld0932|  楼主 | 2022-5-4 21:31 | 只看该作者
zljiu 发表于 2022-5-4 14:41
期待楼主的后续哈

使用特权

评论回复
20
xld0932|  楼主 | 2022-5-4 21:33 | 只看该作者
nawu 发表于 2022-5-4 14:07
通讯的种类好多啊

嗯,这块板子上主要有3类:一个是SPI,来操作TF卡的;一个是CAN;另外一个是UART;值得一提的是MM32F3270的UART支持LIN通讯功能哦

使用特权

评论回复
发新帖 本帖赏金 100.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:上海灵动微电子股份有限公司资深现场应用工程师
简介:诚信·承诺·创新·合作

70

主题

3001

帖子

31

粉丝