当前位置: 首页 > news >正文

TLD7002学习笔记(二)-使用S32K144驱动TLD7002

文章目录

    • 1. 前言
    • 2. 评估板简介
    • 3. 官方驱动
      • 3.1 官网驱动的介绍
      • 3.2 官方驱动的移植
      • 3.3 官方驱动的使用
    • 4. 参考资料

1. 前言

本篇文章是TLD7002学习笔记的第二篇,主要是介绍如何使用S32K144驱动TLD7002-16ES。为此,笔者做了一套基于TLD7002-16ES的评估板,用于调试和评估TLD7002-16ES。

2. 评估板简介

整个评估板的框图如下所示:

评估板框图

控制板主要由MCU、CAN收发器、DCDC和LDO组成:

  • MCU选用了笔者熟悉的S32K144,方便进行软件调试
  • MCU加上CAN收发器用于和TLD7002进行HSLI通信(也是一种uart over can的通信)
  • LDO用于给MCU和CAN收发器供电
  • DCDC用于给灯板供7V电

灯板主要由TLD7002-16ES和LED灯珠组成:

  • VS用于整体芯片供电,供电范围为6-20V,该板12V供电
  • VLED用于LED灯珠的阳极供电,供电范围为2-20V,该板使用7V供电
  • HSLI用于和控制板之间的通信
  • 同时还预留了GPIN0用于烧录芯片时使用,框图未标出

3. 官方驱动

3.1 官网驱动的介绍

驱动下载地址:

  • TLD7002-16ES Device Driver - Infineon Developer Center

下载之后获取的是一个压缩包,解压之后的文件目录如下:

驱动文件目录

这三个文件夹,有用的是src文件夹;templates文件夹因为里面的例程是基于Arduino平台,对直接使用单片机的参考意义不大;因为源文件每个函数都有详细的注释,所以documents里面的文件也用不上。

打开src文件夹,所有的文件如下:

驱动源文件

对应的TLD7002-16ES的驱动架构如下:

驱动文件及架构

  • TLD7002_Definition.h 里面都是关于寄存器的详细定义
  • TLD7002.h 里面是其他层需要用到(如帧结构)的结构体等变量的定义
  • TLD7002_ControlLayer.c/TLD7002_ControlLayer.h 主要是准备帧的组成元素,如CRC校验,滚动码,负载处理等。
  • TLD7002_ControlLayer.c/TLD7002_ControlLayer.h 实现各种帧的收发函数,提供API给外部调用,主要的API如下:

服务层API

3.2 官方驱动的移植

官方驱动实现的功能上文已经介绍,细心的读者肯定会有疑问,为啥没有看到UART收发功能在某个文件实现?

其实官方驱动里确实没有具体实现UART收发功能,但是在TLD7002_ControlLayer.h文件里提供了一个结构体类型,里面包含了待用户实现UART收发功能的函数指针,如下图所示:

TLD7002_NetworkInstance

下面以S32K144驱动TLD7002-16ES为例介绍下完整的移植过程。

  1. 新建S32K144工程,并将TLD7002-16ES的驱动文件包含进去,新增TLD7002_HAL.c/TLD7002_HAL.h文件用于实现UART的收发功能等,新增types.h文件用于实现驱动文件里面的数据类型和S32K1的SDK数据类型兼容。如下图所示:

工程结构

  1. types.h实现数据类型兼容:
#include "stdbool.h"
#include "stdint.h"#define TRUE true
#define FALSE falsetypedef uint8_t uint8;
typedef uint16_t uint16;
typedef uint32_t uint32;
typedef bool boolean;
  1. 新增串口组件进行配置,同时在pin_mux组件配置对应的引脚

UART引脚配置

UART外设配置

  1. 基接下来需要在TLD7002_HAL.c/TLD7002_HAL.h实现串口收发,整个的流程图如下:

UART收发流程图

  1. TLD7002_HAL.C中实现UART发送函数,因为CAN收发器具有回环功能,TX发出去的数据在RX也能收到,为了接收完整的数据,所以需要提前调用LPUART_DRV_ReceiveData函数使能接收。实现函数如下所示:

UART发送函数

  1. 然后实现UART接收函数,同时需要和UART中断函数进行配合,如下所示:

UART接收函数

UART中断函数

  1. 使用广播地址的情况下TLD7002不会回复数据,但是MCU的RX因为CAN收发器的原因仍然会收到自身发的数据,所以需要在接收完数据后进行计数器的复位同时丢弃这部分数据。针对广播地址的情况,也准备了单独的串口接收函数。

广播模式下的UART接收函数

  1. 接着定义一个结构体,包含这些函数的指针,方便其它函数调用

TLD7002_Network

generateStartSyncBreakgenerateStopSyncBreak两个函数的作用是结合使用产生一段时间的低电平,从而复位TLD7002-16ES。在使用TLD7002-16ES过程中基本用不到(使用进入init模式的帧命令更多),所以这里就不去实现了。

  1. 最后在TLD7002_HAL.h文件里增加这些函数的声明。
#if (INST_LPUART_TLD7002==0U)#define LPUART_TLD7002 LPUART0
#elif (INST_LPUART_TLD7002==1U)#define LPUART_TLD7002 LPUART1
#else#define LPUART_TLD7002 LPUART2
#endifextern TLD7002_NetworkInstance_t TLD7002Network;void sendTLD7002Message(uint8 *txBuffer, uint32 len_write);
boolean readReceivedTLD7002Answer(uint8* read_dest, uint32 len_read);
void emptyingReceiveBuffer(void);
void generateStartSyncBreak(void);
void generateStopSyncBreak(void);
void Lpuart_tld7002_RxCallback(void *driverState, uart_event_t event, void *userData);

3.3 官方驱动的使用

官方驱动移植好之后,就可以在用户程序中进行调用了。笔者基于自己的做的DEMO实现了呼吸和流水转向功能。

mian函数的代码如下:

main函数

其中,

  • 关于TLD7002_Init()函数的实现如下:

TLD7002_Init()函数

  • TLD7002初始化步骤参考的软件使用手册中的流程图如下:

TLD7002-16ES初始化流程图

  • 关于Led_Breath()Led_TurnWater()函数,主要就是调用更新占空比的帧命令,由于比较简单并且代码较多,这里就只展示下Led_TurnWater()

Led_TurnWater()函数

  • TLD7002实现动画效果参考的软件使用手册中的流程图如下:

TLD7002-16ES更新动画流程

另外,如果想要知道MCU给TLD7002-16ES发完数据之后,TLD7002-16ES的状态,可以参考如下代码实现:

reponse_val_TLD7002 = TLD7002_RX_DC_UPDATE_14BIT_FRAME(&TLD7002Network, &dcupd14bit_TLD7002);switch(reponse_val_TLD7002)
{ /*< check status of answer */case TLD7002_FRAME_VAL_NO_ERROR: /*< do something */break;case TLD7002_FRAME_VAL_UNDEFINED_ERROR: /*< do something */break;case TLD7002_FRAME_VAL_COPY_FRAME_ERROR: /*< do something */break;case TLD7002_FRAME_VAL_BROADCAST_ERROR: /*< do something */break;case TLD7002_FRAME_VAL_CRC3_ERROR: /*< do something */break;case TLD7002_FRAME_VAL_RC_ERROR: /*< do something */break;}

笔者在调试时遇到的注意事项也简单分享下:

  • 没有进行过OTP烧录的TLD7002-16ES是无法进入active mode,也即没法正常工作。推荐将所有OTP寄存器烧录完成后再使用MCU进行控制。
  • OTP寄存器没有完全烧录的芯片只能接收到广播地址和0x01。OTP区域的CRC寄存器的值一定要写对,否则该器件只能接收到广播地址。
  • 只调用DC_UPDATE命令是不会更改TLD7002的占空比的,只有调用了DC_SYNC命令之后,TLD7002-16es才会在下一个PWM周期开始时更改占空比。
  • 如果需要短时间内频繁使用DC_UPDATE命令,如实现灯的呼吸,建议使用器件地址,不要使用广播地址。否则TLD7002-16ES会进入fail-safe模式。

TLD7002-16ES的软件驱动部分就介绍到这里了。因为Infenion官方提供的驱动比较完善,所以用户在芯片驱动层不需要花太多时间,只需要专注应用层即可。如果有读者想要对TLD7002-16ES的软件驱动做更多的了解,建议深入阅读官方提供的驱动源码。

4. 参考资料

  • TLD7002-16LITE_KIT User Guide

  • TLD7002-16ES software design and device driver

相关文章:

TLD7002学习笔记(二)-使用S32K144驱动TLD7002

文章目录 1. 前言2. 评估板简介3. 官方驱动3.1 官网驱动的介绍3.2 官方驱动的移植3.3 官方驱动的使用 4. 参考资料 1. 前言 本篇文章是TLD7002学习笔记的第二篇&#xff0c;主要是介绍如何使用S32K144驱动TLD7002-16ES。为此&#xff0c;笔者做了一套基于TLD7002-16ES的评估板…...

[元带你学: eMMC协议详解 14] 数据擦除(Erase) 详解

依JEDEC eMMC 5.1及经验辛苦整理&#xff0c;付费内容&#xff0c;禁止转载。 所在专栏 《元带你学: eMMC协议详解》 内容摘要 全文 4200字&#xff0c; 主要内容介绍了各种擦除操作概念以记用法&#xff0c;总结了不同擦除操作的区别&#xff0c; 根据不同安全级别和应用场景…...

【程序人生-Hello‘s P2P】哈尔滨工业大学深入理解计算机系统大作业

计算机系统 大作业 题 目 程序人生-Hello’s P2P 专 业 xxxx 学 号 2021xxxx 班 级 210xxxx 学 生 xx 指 导 教 师 xxx 计算机科学与技术学院 2023年5月 摘 要 HelloWorld是每个程序员接触的第一个程序&#xff0c;表面上平平无奇的它背后却是由操作系统许多设计精巧的机制支撑…...

Android Studio入门

首先确保系统已经安装好JDK和Android SDK Android SDK的安装有两种方案 方案一&#xff1a;直接下载包安装 官网下载 国内下载 方案二&#xff1a;使用命令行工具进行安装 在Android Studio官网下载Command line tools 最新&#xff1a;如果使用 Android Studio&#xff0c;…...

r2pm -ci r2ghidra 时报错:checking pkg-config flags for r_core... no

参考网址&#xff1a; sys/python.sh fails with checking pkg-config flags for r_core... no Issue #1943 radareorg/radare2 GitHub 进入目录/root/.local/share/radare2/r2pm/git/r2ghidra查看configure文件&#xff0c;查找报错位置 执行指令 &#xff1a; # pkg-co…...

【宿舍管理系统】注册登录页面的实现(前端)

目录 一.创建一个jsp文件&#xff0c;命名为login.jsp 代码&#xff1a; 1. 2. 3. 4. 5. 6. ​编辑 二. 创建一个css文件&#xff0c;并命名为style.css 1. ​编辑效果如下&#xff1a; ​编辑 代码解析&#xff1a; 2. 效果如下&#xff1a; 代码解析&#xff1…...

python写入excel,(二) 言简意赅傻瓜式写法

xlrd限制条数&#xff0c;openpyxl 上限较高&#xff0c;所以推荐这种写法 import openpyxl # openpyxl引入模块 def write_to_excel(path: str, sheetStr, info, data): # 实例化一个workbook对象 workbook openpyxl.Workbook() # 激活一个sheet …...

我用ChatGPT写2023高考语文作文(六):北京卷II

2023年 北京卷 II 适用地区&#xff1a;北京 舞台上&#xff0c;戏曲演员有登场亮相的瞬间。生活中也有许多亮相时刻&#xff1a;国旗下的讲话&#xff0c;研学成果的汇报&#xff0c;新产品的发布……每一次亮相&#xff0c;都受到众人关注&#xff1b;每一次亮相&#xff0c;…...

Vue中如何进行图表绘制

Vue中如何进行图表绘制 数据可视化是Web应用中非常重要的一部分&#xff0c;其中图表绘制是其中的重要环节。Vue作为一款流行的前端框架&#xff0c;提供了很多优秀的图表库&#xff0c;以满足不同业务场景下的需求。本文将介绍如何在Vue中进行图表绘制&#xff0c;包括使用Vu…...

【Soft-prompt Tuning for Large Language Models to Evaluate Bias 论文略读】

Soft-prompt Tuning for Large Language Models to Evaluate Bias 论文略读 INFORMATIONAbstract1 Introduction2 Related work3 Methodology3.1 Experimental setup 4 Results5 Discussion & Conclusion总结A Fairness metricsB Hyperparmeter DetailsC DatasetsD Prompt …...

Qt 定时器与定时事件

一、定时器 在头文件.h中进行声明&#xff1a; private slots:void timeOut(); // 定时器超时槽函数在.cpp中进行实现相应的功能&#xff1a; // 构造函数 Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);// 创建一个新的定时…...

《UNUX环境高级编程》(1)UNIX基础

1、引言 2、UNIX体系结构 操作系统 一种软件&#xff0c;控制计算机硬件资源&#xff0c;提供程序运行环境。操作系统包含了内核和一些其他软件&#xff08;如shell、公用函数库、应用程序等&#xff09;。例如Linux就是GNU操作系统的内核&#xff0c;因此也称为GNU/Linux操作…...

MATLAB 入门之旅摘要

matlab官方基础课程&#xff0c;重温或者入门都是不错的选择。 MATLAB 入门之旅 MATLAB 入门之旅 | 自定进度在线课程 - MATLAB & Simulink 基本语法 示例说明x pi使用等号 () 创建变量。 左侧 (x) 是变量的名称&#xff0c;其值为右侧 (pi) 的值。y sin(-5)您可以使用括…...

chatgpt赋能python:Python小数运算:解决精度问题的最佳实践

Python小数运算&#xff1a;解决精度问题的最佳实践 在进行小数运算时&#xff0c;Python是一种十分常用的语言&#xff0c;但在进行小数运算时&#xff0c;由于二进制和十进制之间的转换不完全&#xff0c;可能会导致一些精度问题。为了避免这些问题&#xff0c;让我们一起了…...

Linux 安装Docker完整教程(六)

文章目录 背景一、Docker简介二、docker desktop 和 docker engin 区别三、Linux 安装Docker1. 安装docker的前置条件&#xff1a;2. 查看Docker版本3. 检查是否安装过Docker4. Docker自动化安装 (不想自带化安装的可跳过本步骤&#xff0c;选择手动安装)5. Docker手动安装&…...

手机连接adb 相关问题汇总

目录 关于端口占用问题1 关于修改adb 端口配置问题2 方法3 方法4 关于端口占用问题1 转载链接&#xff1a;https://www.jianshu.com/p/902a89b06271 报错信息&#xff1a; error: no device/emulators found error: device still connecting 解决方案&#xff1a; 重启…...

MySQL数据相关操作

一、介绍 MySQL数据操作&#xff1a; DML 在MySQL管理软件中&#xff0c;可以通过SQL语句中的DML语言来实现数据的操作&#xff0c;包括 使用INSERT实现数据的插入 UPDATE实现数据的更新 使用DELETE实现数据的删除 使用SELECT查询数据以及。 二、插入数据INSERT 1. 插入完整…...

2023年5月青少年软件编程(Python) 等级考试试卷(四级)

青少年软件编程&#xff08;Python&#xff09; 等级考试试卷&#xff08;四级&#xff09;2023.6 分数&#xff1a; 100 题数&#xff1a; 38 一、 单选题(共 25 题&#xff0c; 共 50 分) 1.下列程序段的运行结果是&#xff1f; &#xff08; &#xff09; def s(n): if n0: …...

Python selenium自动化测试模型图解

1、线性测试 优势&#xff1a;每一个脚本都是完整独立的&#xff0c;每一个脚本对应一个测试用例 缺点&#xff1a;开发成本高&#xff0c;会有重复操作重复脚本&#xff1b;维护成本也高&#xff0c;修改重复操作的脚本时&#xff0c;要逐一进行修改。 2、模块化驱动测试 …...

【详解】篮球记分牌硬件及代码

篮球记分牌设计 1 系统设计1.1 设计任务 1.2 性能指标要求1.2 设计思路及设计框图1.2.1设计思路1.2.2总体设计框图1.2.3电路原理图1.2.3 PCB布线图 2 主要程序模块的设计及原理2.1 外部中断0 2.2 菜单2.3 两队比分及两队犯规次数显示及修改2.3.1选择功能2.3.2修改功能2.3.3显示…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

招商蛇口 | 执笔CID,启幕低密生活新境

作为中国城市生长的力量&#xff0c;招商蛇口以“美好生活承载者”为使命&#xff0c;深耕全球111座城市&#xff0c;以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子&#xff0c;招商蛇口始终与城市发展同频共振&#xff0c;以建筑诠释对土地与生活的…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...