基于IMX6ULL_Pro音乐播放器 (一)

一 LCD原理

下图来自百闻网资料

Framebuffer是一块内存,把数据存进去,然后通过LCD控制器就能就行显示。

显示思路

  • 获取LCD设备节点,分辨率等参数,映射到Framebuffer,最后描点实现

修改屏幕上某一个像素(x,y)颜色,首先需要找到其在Framebuffer里面的内存,其中需要确定像素是第几个。

坐标:(y*xres+x) 其中(xres表示x方向上的分辨率)

对应地址:(x,y)像素起始地址=fb_base+(xres*bpp/8)*y + x*bpp/8

二 LCD屏幕显示

首先在头文件里面定义变量

static int lcd_fb; // 显示屏文件描述符
static struct fb_var_screeninfo var; // 显示屏信息
static int screen_size; // 显示屏大小
static unsigned char *lcd_p; // 显示屏映射地址
static unsigned int line_width;
static unsigned int pixel_width;

首先定义了三个函数,分别用于以下功能

//
<think>我们正在讨论的是IMX6ULL_PRO开发板上的温度监控配置和测试方法。根据之前的日志分析,该开发板使用ANATOP模块中的TempMon进行温度监控。以下将分步骤说明配置和测试方法: ### 1. **内核配置与驱动启用** 在Linux内核中,需要启用TempMon驱动及相关依赖: - 进入内核配置界面: ```bash make menuconfig ``` - 启用以下选项: ``` Device Drivers ---> [*] Hardware Monitoring support ---> <*> Temperature sensor device support <*> Freescale i.MX temperature monitor ``` 同时确保依赖的时钟、中断和NVMEM子系统已启用(默认已选)。 ### 2. **设备树配置** 在设备树文件(如`imx6ull-14x14-evk.dts`)中添加TempMon节点: ```dts &anatop { tempmon: tempmon { compatible = "fsl,imx6ul-tempmon", "fsl,imx6sx-tempmon"; interrupt-parent = <&gpc>; interrupts = <0 49 IRQ_TYPE_LEVEL_HIGH>; fsl,tempmon = <&anatop>; nvmem-cells = <&tempmon_calib>, <&tempmon_temp_grade>; clocks = <&clks IMX6UL_CLK_PLL3_USB_OTG>; }; }; ``` 关键配置说明: - `interrupts = <0 49 4>`:使用GPC中断控制器的49号中断。 - `clocks = <&clks 27>`:改为时钟宏`IMX6UL_CLK_PLL3_USB_OTG`(值为27)以提高可读性。 - `nvmem-cells`:需在OTP节点中定义校准数据(通常由芯片预烧录)。 ### 3. **校准数据获取** 校准数据存储在OTP(次性可编程存储器)中,需通过NVMEM驱动读取: - 检查校准数据是否正常加载: ```bash cat /sys/bus/nvmem/devices/imx-ocotp0/nvmem | hexdump -C ``` 查找地址`0x530`(温度校准值)和`0x538`(温度等级值)的数据。 ### 4. **测试温度读取** 驱动加载成功后,通过sysfs接口读取温度: ```bash cat /sys/class/thermal/thermal_zone0/temp ``` 输出值为毫摄氏度(例如`38000`表示38℃)。 ### 5. **触发温度中断测试** 验证高温报警功能: - 设置触发温度阈值(以95℃为例): ```bash echo 95000 > /sys/class/thermal/thermal_zone0/trip_point_0_temp ``` - 使用热风枪加热CPU,观察日志是否触发中断: ```log [ 102.354876] thermal thermal_zone0: critical temperature reached (95 C), shutting down ``` ### 6. **常见问题排查** - **驱动探测失败**: 检查dmesg日志确认依赖资源: ```bash dmesg | grep tempmon ``` 若出现`failed to get clock`或`nvmem-cell not found`,需核对设备树时钟和NVMEM配置。 - **温度值异常**: 校准数据错误会导致读数偏差,重新计算校准参数: $$ T_{\text{real}} = \frac{T_{\text{raw}} \times 165}{0xFFFF} - 25 $$ 其中$T_{\text{raw}}$为传感器原始值。 > 提示:韦东山IMX6ULL_PRO开发板已默认配置TempMon[^2],若使用官方Uboot,需确保内核设备树与硬件匹配。 §§相关问题§§ 1. 如何为i.MX6ULL手动校准温度传感器? 2. Linux thermal子系统如何管理多温度监测点? 3. 嵌入式系统中如何设计高温保护策略? [^1]: UBOOT移植(基于百问网IMX6ULL_PRO开发板)。在路径uboot-2017.03/configs下复制份nxp官方imx6ullevk开发板的默认配置文件并重命名,作为我们自己开发板的默认配置文件。指令如下: cp configs/mx6ull_14x14_evk_emmc_defconfig configs/mx6ull_100ask_pro_emmc_defconfig [^2]: 韦东山imx6ull_pro开发板启动文件分析。运行机制:当系统进入关机模式(runlevel 0)或重启模式(runlevel 6)时,rcK会被调用。 </think>### IMX6ULL_PRO 开发板温度监控配置与测试方法 #### 1. **硬件基础** IMX6ULL 处理器内置温度传感器(TempMon),通过 ANATOP 电源管理模块实现[^1]: - 温度范围:$-40℃$ 至 $105℃$(工业级) - 精度:$\pm 5℃$ - 测量点:处理器核心温度 #### 2. **内核驱动配置** 在 Linux 内核中需要启用 TempMon 驱动: ```bash # 进入内核配置 make menuconfig # 启用选项 Device Drivers ---> [*] Hardware Monitoring support ---> <*> Freescale i.MX temperature monitor ``` #### 3. **设备树配置** 在设备树文件(如 `imx6ull-14x14-evk.dts`)中添加节点: ```dts &anatop { tempmon: tempmon { compatible = "fsl,imx6ul-tempmon"; interrupt-parent = <&gpc>; interrupts = <0 49 IRQ_TYPE_LEVEL_HIGH>; // 使用中断49 fsl,tempmon = <&anatop>; // 绑定ANATOP模块 nvmem-cells = <&tempmon_calib>; // 校准数据 clocks = <&clks IMX6UL_CLK_PLL3_USB_OTG>; // 依赖时钟 }; }; ``` #### 4. **校准数据配置** 在 OTP 节点添加温度校准参数: ```dts ocotp: ocotp-ctrl@21bc000 { tempmon_calib: calib@38 { reg = <0x38 4>; // 校准参数存储地址 }; }; ``` #### 5. **温度测试方法** 驱动加载后可通过 sysfs 接口读取: ```bash # 查看温度值(单位:毫摄氏度) cat /sys/class/thermal/thermal_zone0/temp # 示例输出:38000 (表示38℃) ``` #### 6. **实时监控工具** 使用开源工具进行持续监控: ```bash # 安装lm-sensors sudo apt install lm-sensors # 检测传感器 sensors-detect # 查看实时温度 sensors ``` #### 7. **压力测试验证** 使用 stress-ng 触发温度变化: ```bash # 安装测试工具 sudo apt install stress-ng # 启动CPU压力测试(持续60秒) stress-ng --cpu 4 --timeout 60 & # 监控温度变化 watch -n 1 cat /sys/class/thermal/thermal_zone0/temp ``` #### 8. **常见问题排查** - **驱动未加载**:检查 dmesg | grep tempmon - **读数异常**:验证校准数据 `hexdump -C /sys/firmware/imx/otp_mem` - **中断未触发**:确认 GPC 中断控制器初始化 > 提示:韦东山开发板默认已配置温度监控[^2],若使用官方镜像可直接测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值