Matrix

CarlyleLiu‘s Blog

Pinctrl 概述

关于 pinctrl 主要可以归结为两类设置,其中一类是功能选择,即一组 gpio 是用于 iic 还是 uart 还是就作为普通 gpio 来用,另一类是 gpio 的特性配置,即上拉、下拉、驱动能力和速率的配置。而 pinctrl 主要负责这两类配置的管理工作。总结起来 pinctrl 主要完成以下三种功能:

  • 引脚枚举与命名 (Enumerating and naming)
  • 引脚复用 (Multiplexing):比如用作 GPIO、I2C 或其他功能
  • 引脚配置 (Configuration):比如上拉、下来、open drain、驱动强度等
阅读全文 »

GPIO 概述

以前学习 stm32 的时候看到手册里有关于 gpio 的电路图,如下:

  • 保护二极体:
    IO 引脚上下两边两个二极体用于防止引脚外部过高、过低的电压输入。当引脚电压高于 VDD 时,上方的二极体导通;当引脚电压低于 VSS 时,下方的二极体导通,防止不正常电压引入晶片导致晶片烧毁

  • P-MOS 管和 N-MOS 管:
    由 P-MOS 管和 N-MOS 管组成的单元电路使得 GPIO 具有“推挽输出”和“开漏输出”的模式

  • TTL 肖特基触发器:
    信号经过触发器后,模拟信号转化为 0 和 1 的数字信号。但是,当 GPIO 引脚作为 ADC 采集电压的输入通道时,用其“模拟输入”功能,此时信号不再经过触发器进行 TTL 电平转换。ADC 外设要采集到的原始的模拟信号

阅读全文 »

Linux SPI 驱动框架

对于 SPI 的驱动框架与 I2C 是大致一致的,也分为两层,控制器驱动程序层叫 spi_controller ,主要提供 transfer 函数,进行 spi 协议的收发。

另一层是设备驱动层,基于 spi_bus_type,在 driver 里则使用 spi_read、spi_writer 等函数,最终也会调用到 controller->transfer 函数进行发送接收。

阅读全文 »

IIC 协议

写操作

流程如下:

  • 主芯片要发出一个 start 信号
  • 然后发出一个设备地址(用来确定是往哪一个芯片写数据),方向(读/写,0 表示写,1 表示读)
  • 从设备回应(用来确定这个设备是否存在),然后就可以传输数据
  • 主设备发送一个字节数据给从设备,并等待回应
  • 每传输一字节数据,接收方要有一个回应信号(确定数据是否接受完成),然后再传输下一个数据
  • 数据发送完之后,主芯片就会发送一个停止信号

下图:白色背景表示"主→从",灰色背景表示"从→主"

阅读全文 »

dtb 数据解析

内核启动阶段获得 dtb 位置指针

以 arm64 为例,内核启动如下:

1
2
3
4
5
6
7
8
9
10
11
__HEAD
_head:

#ifdef CONFIG_EFI
add x13, x18, #0x16
b stext
#else
b stext // branch to kernel start, magic
.long 0 // reserved
#endif
...

在开启 UEFI 支持时,add x13, x18, #0x16 这个 code 实际上是为了满足 EFI 格式的”MZ”头。如果使用 UEFI 来启动 kernel, 会识别出来并走 UEFI 启动的流程,如果是普通的启动过程如使用 uboot 的 booti 进行引导,那么第一条指令就是一条 dummy 指令,第二条就跳转到 stext 运行了。

阅读全文 »

seq_file

概述

seq_file 只是在普通文件 read 中加入了内核缓冲的功能,从而实现顺序多次遍历读取大数据量的简单接口,seq_file 一般只提供只读接口。

1
2
3
4
5
6
struct seq_operations {
void * (*start) (struct seq_file *m, loff_t *pos);
void (*stop) (struct seq_file *m, void *v);
void * (*next) (struct seq_file *m, void *v, loff_t *pos);
int (*show) (struct seq_file *m, void *v);
};
阅读全文 »

kobject

概述

  • Kobjects 有一个 name 和一个引用计数,还具有父指针(允许将对象排列成层次结构)
  • ktype 是嵌入在 kobject 结构体中的对象。 每个 kobject 结构都需要一个相应的 ktype。 ktype 控制 kobject 在创建和销毁时的行为
  • kset 是一组 kobjects(kset 本身包含一个 kobject), 这些 kobject 可以拥有相同的 ktype,kset 也是 sysfs 中的一个子目录。Ksets 可以支持 kobjects 的“热插拔”(uevent 事件)
阅读全文 »

MTPA

为什么要用 MTPA

当电机采用 id=0 的控制策略,这种控制方法忽略了磁阻转矩的作用,电磁转钜方程如下:

\[ \tau _e = \frac{3}{2}p[k_e \cdot i_q + (L_d - L_q)\cdot i_d \cdot i_q] \]

转矩分为永磁转矩 Tr 和磁阻转矩 Tm,而 id=0 只剩下 Tr。这会导致电流的利用率不高,系统的效率降低。所以 id=0 的控制比较适用于隐极式电机(Ld=Lq),而对于凸极式电机并不最优,所以需要重新考虑控制策略。

阅读全文 »

物理学基础概念

左手定则

将左手的食指,中指和拇指伸直,使其在空间内相互垂直。食指方向代表磁场的方向(从 N 级到 S 级),中指代表电流的方向(从正极到负极),那拇指所指的方向就是受力的方向。可用于判断安培力(运动导体所受到的力)和洛伦兹力(运动电荷所受的力)。

右手定则

伸开右手,使拇指与其余四个手指垂直,并且都与手掌在同一平面内;让磁感线垂直于手心进入,并使拇指指向导线运动方向,这时四指所指的方向就是感应电流的方向。用于判断导体在做切割磁场时产生的电流方向。

阅读全文 »
0%