摘要:
文章介绍 本文主要是基于 T507 Android 10 Linux 4.9 的源代码,对 Linux W1 总线框架的分析记录,便于了解整个框架的基本实现机制。 驱动框架 这张图基本上将内部的各个源文件相互关系表述出来了。 简析说明 master linux-4.9/drivers/w1/mast 阅读全文
摘要:
基本信息 硬件信息 硬件平台:T507 (Android 10 Linux 4.9) 模组型号:EC200U-CN(Cat1)(展讯芯片) 相关文件 代理提供 longan/kernel/linux-4.9/drivers/net/usb/qmi_wwan_q.c android/vendor/aw 阅读全文
摘要:
分析平台:全志 A64 内核版本:Linux 4.9 数据手册:Allwinner_A64_User_Manual_V1.1.pdf (whycan.com) 驱动框架 I2C 设备驱动 作为方案应用来说,我们是最经常要动的地方,这一层主要与具体的芯片功能强关联,不同的芯片具有不同的使用方法,如触摸 阅读全文
摘要:
相关信息 内核版本:Linux version 4.9.56 驱动文件:lichee\linux-4.9\drivers\video\backlight\backlight.c 驱动作用 对上,面对应用层提供统一的设备节点入口同级,面对驱动层提供设备驱动加载卸载通知事件,以及背光控制接口。对下,面对 阅读全文
摘要:
参考资料 器件规格书:https://atta.szlcsc.com/upload/public/pdf/source/20131104/1457706659695.pdf I2C总线规范:https://community.nxp.com/pwmxy87654/attachments/pwmxy8 阅读全文
摘要:
芯片通信测试 根据芯片手册,ATECC608B 的 7bit 器件地址是:0x35 root@linux:/usr/bin# i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- 阅读全文
摘要:
驱动移植 供应商无法提供相应的驱动程序,不过在 linux 最新的内核倒是有一份 pcf85363 的驱动,看代码并核对寄存器功能,是可以兼容 pcf85263 芯片。只是我们用的内核比较老 linux 4.9,rtc 子系统的接口有些变化,不能直接拿来用。根据 Linux 4.9 现有的驱动程序, 阅读全文
摘要:
一、踩坑缘由 在调试 I2C 器件时,我一般习惯于使用 i2cdetect 工具来确认芯片是否有应答,通常有应答之后,就会开始着手移植或者编写对应的驱动程序,但是在调试 sgp41 传感器时却不灵了。 二、问题现象 在连续完成多个 I2C 器件的调试和驱动开发之后,最后一个 sgp41 传感器却一直 阅读全文
摘要:
记录说明 原本这么简单的芯片,没有必要做记录,后来发现其中有一颗单独挂在 TWI2 无法通信,而主要原因是最容易忽视的电源域的问题,因此记录一下这件事情。 芯片介绍 MCP3021 是一颗 10BIT 的 ADC 器件,直接通过 I2C 读取两个字节的数据即可获取到 10BIT 的数值。 分析过程 阅读全文
摘要:
基本原理 该看门狗的设备驱动实现原理很简单,比较主要的有两点: 一、定时器喂狗 通过定时器根据配置文件配置的喂狗方式(如脉冲切换、电平切换),对指定的 gpio 进行脉冲切换或电平切换实现喂狗。 脉冲切换 指的是喂狗时,会给 gpio 一个 1us 宽度的高电平或低电平(取决于配置的 gpio 电平 阅读全文
摘要:
使用说明 第一次遇到看门狗芯片是通过切换电平信号来喂狗,如 SGM706 芯片,之前也比较少会用到看门狗芯片。原本打算参考 sunxi-wdt.c 的框架,利用定时器自己写一个,无意中发现内核已经有 gpio_wdt.c 驱动程序,其原理也是通过内核定时器实现喂狗。因其使用了 of_get_gpio 阅读全文
摘要:
硬件信息 内核版本:Linux 4.9 硬件原理: GPIO 通过一颗 MOS 管(2N7002ET1G),接到 LED 负极,LED 正极接电源。GPIO 通过拉高导通 MOS ,将 LED 接地,实现点亮 LED。 内核配置 配置内核驱动:make ARCH=arm64 menuconfig D 阅读全文
摘要:
内核配置 内核版本:Linux version 4.9.56 make ARCH=arm64 menuconfig Device Drivers > Input device support > [*] Keyboards > <*> GPIO Buttons 配置文件 sys_config.fex 阅读全文
摘要:
一、input 子系统简介 输入子系统主要用于支持各种输入设备,可大大简化这类设备驱动的开发难度。以下为个人的理解,可能不同的内核版本会略有差异,在这里分析的内核为 linux-4.9。 无论在 Linux 是什么子系统,其目的都是为了将硬件相关的进行解耦,提高代码的复用性,简化设备驱动的开发难度。 阅读全文
摘要:
一个学习硬件四层板设计的小作品,目前看还是非常受欢迎的,购买链接: https://x.jlc.com/platform/detail/55fee4af9a464fe1848dc9988446860a 一、作品简介 一款可通过命令行自行适配多种摄像头且支持 HTTP 、UDP 传输视频流的无线网络图 阅读全文
摘要:
一、作品简介 一款用于记录嵌入式设备的串口调试信息设备,目前可以同时支持两路串口输入数据,且串口参数可配置。 二、应用场景 需要实时记录产品在长时间运行过程中产生日志信息。(如产品在户外时)需要实时记录多个产品在压力测试过程中产生的日志信息。(如产品批量老化压力测试) 三、作品概述 本模块主要解决了 阅读全文
摘要:
自旋锁简单说明: 自旋锁主要解决在竞态并发下,保护执行时间很短的临界区。它只允许一个执行单位进入临界区,在该执行单位离开前,其它的执行单位将会在进入临界区前不停的循环等待(即所谓的自旋),直至该执行单位离开临界区后,最先等待的一个执行单位会立即进入临界区。此方式不涉及到上下文切换,因此效率极高。 出 阅读全文
摘要:
Tasklet 介绍 Linux 内核提供的四种中断下半部中 softirq(软中断)、tasklet(小任务)、workqueue(工作队列) 、request thread(中断线程)中的其中一种,其效率仅次于软中断,但远高于request thread 和 workqueue。 软中断(sof 阅读全文
摘要:
全志 Tina 系统的 USB Gadget 配置方法,随笔记录,实测为 R311 平台,其它平台应该通用。 一、配置内核 二、编译驱动并加载 # UAC insmod usb_f_uac1.ko # NCM insmod u_ether.ko insmod usb_f_ncm.ko # ACM i 阅读全文
摘要:
一、模拟网卡简介 在 Linux 通过 usb 模拟网卡时,有四种方式: 1. 使用 usb gadget rndis 2. 使用 usb gadget ecm 3. 使用 usb gadget ncm 4. 使用 usb gadget eem rndis:是微软公司制定的协议规范, 不过似乎规范不 阅读全文
摘要:
借助五一假期,写了一个命令行解析的基础库,一般可用于串口命令解析、TCP命令解析等等。 具有以下几种特点: 不涉及到具体硬件, 纯软件协议,与具体硬件分离。支持不定长命令行,逐个字符解码,可以支持不定长的命令参数解析。支持解析过程中,对字符进行大小写转换,便于支持命令行大小写不敏感。内存空间占用可控 阅读全文
摘要:
借助五一假期,写了一个串口通信协议基础库,虽然写着适用于单片机,但实际上并不限制具体的硬件平台。 特点如下: 不涉及到具体硬件,libserial_protocol 纯软件协议,与具体硬件分离。内存空间占用可控,libserial_protocol 支持动静态内存,内存空间可控。接口简单容易复用,l 阅读全文
摘要:
每完成一个小作品以后,PCB打样回来,手工焊接着费时费力,定制钢网又未免太过浪费,想到自己有一台 FDM 3D 打印机,是不是可以通过 3D 打印机打印 "钢网" 呢? 在网上也翻过相关的资料,发现有网友已经实现,不过过程较为繁琐,且还需要对细节进行修改。如果焊盘数量很多,岂不是要花更多时间在修修补 阅读全文
摘要:
在多线程并发使用的时候,总是在运行过程中莫名其妙的 crash,后面才意识到 LVGL 本身不支持并发,加了互斥锁解决了。 在引入矢量字库时(freetype),又有启动时会概率性 crash 的问题,每次 crash 的地方还不一样,这个坑爬了好久,甚至都怀疑是不是 freetype 有问题,还好 阅读全文
摘要:
一、介绍说明 目前常见流行的 RTOS 实现方式,如 FreeRTOS、uCosII、RT-Thread 等等,它们的内部的任务切换实现原理都差不多,都是通过借助汇编,根据不同的情况读写 CPU 寄存器(R0~R15)来实现保护现场和恢复现场以及指令跳转,效率很高,但也就意味着很难做到跨平台使用。 阅读全文
摘要:
使用目前最新的 Releases 版本 LVGL v8.2.0 ,移植好 freetype2 后测试,发现每次启动程序时会高概率出现屏幕显示全白色背景,无任何内容的问题。 打开日志开关,出现问题时会有如下打印: lv_font_get_glyph_bitmap: Asserted at expres 阅读全文
摘要:
NDK 编译环境搭建请参考:【工作笔记】NDK 编译开源库 nghttp2/openssl/curl_lovemengx的博客-CSDN博客 一、下载源代码 wget https://github.com/sqlite/sqlite/archive/refs/tags/version-3.38.0. 阅读全文
摘要:
介绍说明 最近自己基于 XR872 在做一个小作品练习练习,具备可以配置的功能,选择了使用 ini 作为配置文件。我调研了网上常见的 ini 解析库,几乎都涉及到了 fopen()/fgets().. 以及 malloc()。 说明这些开源库都仅适用于支持完整 C语言标准库的系统,并不适用于 RTO 阅读全文
摘要:
AndroidStudio:3.5.2 AndroidPhone:XiaoMi5 (Android 8.0) AndroidDemo:3.1.4-44 AndroidDemo 源码路径:SimplicityStudio\v5\developer\sdks\gecko_sdk_suite\v3.2\a 阅读全文
摘要:
一、导入库文件 1. 拷贝以下两个文件到工程的 libs 目录下 ble_mesh-android_api_high-release.aar ble_mesh-android_api_low-release.aar 2. 修改 app 中的 build.gradle 增加以下内容 implement 阅读全文