正点原子阿尔法板无法使用触摸屏问题

问题背景

  在我之前复刻智能家居项目时,发现无法使用触摸屏。当时面临诸多因素,如会不会是我的内核问题、设备树问题还是屏幕驱动问题等,当时我也只是看了一些基础课程刚上手,看着头大,于是选择取巧,用mgftool里的官方zImage和里面的设备树进行后续编程。项目完成后,对linux、设备树、驱动有了一定了解,现在回头解决这个问题。

解决过程

经过思考分三步骤探索
1、先了解触摸屏驱动和设备树如何联系起来(正点原子视频)
  视频中提到,NXP 官方的 Linux 内核默认已经开启了 LCD 驱动 。 LCD内有显存(RAM),为了方便操作,提出了Framebuffer,通过操作Framebuffer来访问显存。linux设备树下会存在一个/dev/fbx。一般不会直接操作fb进行写,一般直接通过ui库进行。还提到evk,设备树应该搞eck那个。通过视频了解到之前我在测试时,碰到的lcd显示屏花屏是因为源码中设备树使用的是四寸屏幕,而我使用的是七寸屏幕,屏幕驱动的设备树是不一样的。

2、根据出厂内核,倒推出内核配置,检查是否是内核某些编译选项没有打开。

3、判断当初是设备树问题还是内核问题。

制定好思路,开始进行以下探索

1、先整一个纯净的设备树,然后添加LCD屏幕设备树节点。

  我从源码里拷贝了一份imx6ull-alientek-emmc.dts文件,在这个基础上添加lcd设备树节点,但碰到了kernel panic。明显是设备树的问题,我很疑惑,然后在官方的设备树用官方的imx6ul-14×14-evk.dts的基础上添加设备树,lcd屏幕显示就没问题。当时我还觉得正点原子怎么源码的设备树都有问题,后来才发现我是个joker。用imx6ull-alientek-emmc.dts时,我定义的lcdif在上面,下面还有一个lcdif,就覆盖了我的节点。修改后测试成功,lcd成功显示。
  也不禁感叹,恐惧来源于未知。原来之前一直困扰我的触摸屏问题,只是我不了解触摸屏驱动相关的知识。

2、触摸屏无法使用

  本以为一切正常,但在进行测试项目代码时,发现触摸屏无法使用。我要用如下指令,查看了输入设备。

# cat /proc/bus/input/devices
I: Bus=0019 Vendor=0000 Product=0000 Version=0000
N: Name="20cc000.snvs:snvs-powerkey"
P: Phys=snvs-pwrkey/input0
S: Sysfs=/devices/platform/soc/2000000.aips-bus/20cc000.snvs/20cc000.snvs:snvs-powerkey/input/input0
U: Uniq=
H: Handlers=kbd event0 evbug
B: PROP=0
B: EV=
### 正点原子阿尔法实现键盘输入打字功能的方法 正点原子阿尔法是一款基于ARM Cortex-M系列微控制器开发的学习平台,支持多种外设接口和通信协议。要实现在该平台上通过外部设备(如USB键盘)进行文字输入的功能,可以按照以下方式设计并实现。 #### 1. USB HID 协议的支持 为了使正点原子阿尔法能够识别并处理来自USB键盘的数据,需要在其固件中加入对 **USB Human Interface Device (HID)** 协议的支持。大多数嵌入式系统框架都提供了标准库来简化这一过程。例如,STM32CubeMX 和 HAL 库为 STM32 微控制器提供了一个完整的 USB 设备类驱动程序集合[^3]。 ```c // 初始化 USB 接口 USBD_Init(&hUsbDeviceHS, &USR_desc, 0); USBD_RegisterClass(&hUsbDeviceHS, USBD_HID_CLASS); // 处理接收到的按键事件 void USBD_HID_DataIn(uint8_t *pData, uint32_t Length) { // 解析 pData 中的内容以获取键码 } ``` #### 2. 键盘扫描与字符映射 当 USB 键盘连接到阿尔法时,它会发送一系列报告给主机(即阿尔法)。这些报告包含了当前按下的键值信息。通常情况下,每个键对应一个特定的十六进制编码。因此,应用程序需要维护一份从键码到 ASCII 字符或其他编码系统的转换表[^4]。 ```c const char keymap[256] = { /* 定义键码到字符的映射关系 */ }; char GetCharFromKeyCode(uint8_t keycode) { if (keycode >= sizeof(keymap)) return '\0'; return keymap[keycode]; } ``` #### 3. 显示输出模块集成 完成键盘输入解析后,还需要考虑如何显示所录入的文字。如果目标是将文本呈现在 LCD 屏幕或者通过串口传输至 PC,则需进一步配置相应的硬件资源及其驱动函数[^5]。 ```python def display_text_on_lcd(text): lcd.clear() lcd.write_string(text) # 假设已接收到来自 USB 的字符串 s display_text_on_lcd(s) ``` 以上代码片段展示了基本逻辑流程,具体实现细节可能依据使用的工具链有所不同。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值