一、M74HC595简介
M74HC595器件是采用硅栅C2MOS技术制作的具有输出锁存器(3态)的高速CMOS 8位移寄存器。
该设备包含一个8位串行进、并行出移位寄存器,它提供一个8位d型存储寄存器。存储寄存器有8个3状态输出。为移位寄存器和存储寄存器都提供了单独的时钟。
移位寄存器有直接覆盖清除,串行输入和串行输出(标准)引脚级联。移位寄存器和存储寄存器都使用正边缘触发时钟。如果两个时钟连接在一起,移位寄存器状态将始终是存储寄存器前面的一个时钟脉冲。
特性:
- 高速:在Vcc = 6V时,fMAx = 59mhz(典型)
- 低功耗:Icc = 4 μA (max)
- 工作电压范围宽:Vcc (opr.) = 2 V至6 V
1.M74HC595设备操作原理图:
2. 开发板原理图
二、 添加设备树的节点
1.设置引脚
首先设置spi引脚的复用功能,找到 spi4_pins_b 节点:
vi stm32mp15-pinctrl.dtsi
2. 找出控制器的设备树
stm32mp151.dtsi
spi4: spi@44005000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "st,stm32h7-spi";
reg = <0x44005000 0x400>;
interrupts = <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&rcc SPI4_K>;
resets = <&rcc SPI4_R>;
dmas = <&dmamux1 83 0x400 0x01>,
<&dmamux1 84 0x400 0x01>;
dma-names = "rx", "tx";
power-domains = <&pd_core>;
status = "disabled";
};
3. 根据内核帮助文档编写自己的设备树
/home/linux/linux-5.10.61/Documentation/devicetree/bindings/i2c/
&spi4{
pinctrl-names = "default", "sleep";
pinctrl-0 = <&spi4_pins_b>;
pinctrl-1 = <&spi4_sleep_pins_b>;
cs-gpios = <&gpioe 11 0>;
status = "okay";
m74hc595@0{
compatible = "m74hc595";
reg = <0>;
spi-max-frequency = <10000000>; //10Mhz
};
};
4. 重新编译设备树
make dtbs
重启开发板
安装驱动
三. 编写M74HC595设备驱动
1.先搭个spi设备驱动框架
#include <linux/init.h>
#include <linux/module.h>
#include <linux/spi/spi.h>
int m74hc595_probe(struct spi_device *spi)
{
printk("%s:%d\n", __func__, __LINE__);
return 0;
}
int m74hc595_remove(struct spi_device *spi)
{
printk("%s:%d\n", __func__, __LINE__);
return 0;
}
struct of_device_id oftable[] = {
{
.c