RTC
从原理图可知,yy3568外挂一个RTC芯片AT8563,挂在I2C5上,中断脚位GPIO0_D3,却可输出 32.768kHz的时钟信号。

AT8563是一种实时时钟芯片,用于提供精确的时间和日期信息。它是一种低功耗设备,常用于嵌入式系统、电子设备和计算机等领域。AT8563可以通过I2C接口与主控芯片或微处理器连接,通过内部晶体振荡器来追踪时间,并提供精确的时钟功能。它通常用于记录事件时间戳、计时、闹钟功能和系统电源管理等应用场景。
AT8563和hym8563是完全可以替换的,所以我们在适配驱动的时候,直接使用hym8563驱动
AT8563硬件接口说明:
- I2C地址:0x51
- 中断引脚:GPIO0_D3
- CLKOUT引脚:RTC_CLK
- I2C总线号:I2C5
AT8563设备树
&i2c5 {
status = "okay";
hym8563: hym8563@51 {
compatible = "haoyu,hym8563";
reg = <0x51>;
pinctrl-names = "default";
pinctrl-0 = <&rtc_int>;
interrupt-parent = <&gpio0>;
interrupts = <RK_PD3 IRQ_TYPE_LEVEL_LOW>;
};
};
AT8563驱动配置
通过menuconfig打开CONFIG_RTC_DRV_HYM8563

AT8563验证
以上配置完成之后,就可以在/sys/class/rtc/ 下看到rtcN的。

AT8563注册在RTC1。

AT8563同步时间
通过hwclock -r -f /dev/rtc1 读取rtc时钟
如果芯片没有同步时间时,驱动会提示:没有可用的有效时钟/日历值

通过hwclock -w -f /dev/rtc1 同步时间并写入到RTC中
再次通过hwclock -r -f /dev/rtc1 读取rtc时钟,就有对应时钟

LED
Linux内核的 led 子系统主要功能:
- 为每个设备在/sys/class/leds下创建不同的文件节点,用于操作led
- 抽象出所有的灯基本操作,设置亮、灭,光强、闪烁等
YY3568上接了两个蓝色LED灯,分别为GPIO3_A4和GPIO02_B2,如下图所示:

我们将两个蓝色LED等命名为:blue1 和 blue2。
LED灯设备树配置
增加对应LED灯节点,compatible为gpio-leds。节点中挂载两个LED,lable分别为blue1 和 blue2:
gpio_leds: gpio-leds {
compatible = "gpio-leds";
led@1 {
gpios = <&gpio3 RK_PA4 GPIO_ACTIVE_HIGH>;
label = "blue1"; // Blue1
retain-state-suspended;
};
led@2 {
gpios = <&gpio2 RK_PB2 GPIO_ACTIVE_HIGH>;
label = "blue2"; // Blue2
retain-state-suspended;
};
};
增加对应LED灯引脚初始化配置:
leds_gpio: leds-gpio {
rockchip,pins =
<3 RK_PA4 RK_FUNC_GPIO &pcfg_pull_up>,
<2 RK_PB2 RK_FUNC_GPIO &pcfg_pull_up>;
};
LED menuconfig配置
配置选项位置如下:
│ Location: │
│ -> Device Drivers │
│ -> LED Support (NEW_LEDS [=y])

命令行操作LED
以上操作完,编译烧录,就可以在/sys/class/leds下产生对应文件节点:

- 点亮blue1,操作如下:
echo 255 > /sys/class/leds/blue1/brightness

- 关闭blue1,操作如下:
echo 255 > /sys/class/leds/blue1/brightness
