SATA功能调试记录

调试的目的

使思源项目的rk3568板子可以识别并挂载sata硬盘,并且可以成功读写。

问题现象

描述问题产生的现象,可以附上关键日志,或截图(如果是日志尽量以文本方式呈现,尽量去除不重要的日志,方便搜索)

板子有个SATA接口,在此接口上插入硬盘时,系统并不能识别到该硬盘,没有出现相应的/dev/sd*分区,并且sata接口旁边的led灯没有亮起。
在这里插入图片描述

调试的思路

概要描述需要的关键步骤。

步骤一,查阅数据手册,获取模块信息
步骤二,查阅原理图,确定模块和CPU的对应GPIO
步骤三,修改设备树,添加节点属性
步骤四,修改板级配置文件
步骤五,修改驱动

问题解决方法和过程

步骤一,查阅数据手册,获取模块信息

通过查阅原理图以及实物板,可以板子的硬盘接口为SATA,查阅RK3568相关手册可知其如下特点。

图. 芯片资源
在这里插入图片描述

图. DTS 配置
在这里插入图片描述

步骤二,查阅原理图,确定模块和CPU的对应GPIO

根据原理图,可知模块对应引脚如下
USB3_OTG0_SSTXP/SATA0_TXP SATA接口
USB3_OTG0_SSTXN/SATA0_TXN SATA接口
USB3_OTG0_SSRXP/SATA0_RXP SATA接口
USB3_OTG0_SSRXN/SATA0_RXN SATA接口
PWM13_M1/SPI3_CS0_M1/SATA0_ACT_LED/UART9_RX_M1/I2S3_SDI_M1/GPIO4_C6_d SATA_ACK_LED 指示灯

图. 芯片引脚
在这里插入图片描述

图. CPU引脚
在这里插入图片描述

步骤三,修改设备树,添加节点属性

arch/arm64/boot/dts/rockchip/rk3568.dtsi
找到sata0节点,不需要修改,观察其中两个重要属性"compatible"和"phy-names"。compatible 表示其用的是标准的AHCI驱动,phy-names = "sata-phy"表示AHCI驱动会通过这个属性名字找到对应combphy节点。

sata0: sata@fc000000 {
        compatible = "snps,dwc-ahci";
        reg = <0 0xfc000000 0 0x1000>;
        clocks = <&cru ACLK_SATA0>, <&cru CLK_SATA0_PMALIVE>,
                <&cru CLK_SATA0_RXOOB>;
        clock-names = "sata", "pmalive", "rxoob";
        interrupts = <GIC_SPI 94 IRQ_TYPE_LEVEL_HIGH>;
        interrupt-names = "hostc";
        phys = <&combphy0_us PHY_TYPE_SATA>;
        phy-names = "sata-phy";
        ports-implemented = <0x1>;
        power-domains = <&power RK3568_PD_PIPE>;
        status = "disabled";
};

arch/arm64/boot/dts/rockchip/rk3568.dtsi
找到combphy0_us节点,不需要修改,assigned-clock-rates 可选项有:24000000、25000000和100000000。

combphy0_us: phy@fe820000 {
        compatible = "rockchip,rk3568-naneng-combphy";
        reg = <0x0 0xfe820000 0x0 0x100>;
        #phy-cells = <1>;
        clocks = <&pmucru CLK_PCIEPHY0_REF>, <&cru PCLK_PIPEPHY0>,
                <&cru PCLK_PIPE>;
        clock-names = "refclk", "apbclk", "pipe_clk";
        assigned-clocks = <&pmucru CLK_PCIEPHY0_REF>;
        assigned-clock-rates = <100000000>;
        resets = <&cru SRST_P_PIPEPHY0>, <&cru SRST_PIPEPHY0>;
        reset-names = "combphy-apb", "combphy";
        rockchip,pipe-grf = <&pipegrf>;
        rockchip,pipe-phy-grf = <&pipe_phy_grf0>;
        status = "disabled";
};

kernel/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi
添加代码,使能节点,SATA控制器节点和对应的 phy 节点同时使能status属性

&sata0 {
	status = "okay";
};

&combphy0_us {
	status = "okay";
};

kernel/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi
找到leds节点,在leds节点中添加hdd_led新子节点,并默认使能"on",如下

leds: leds {
......
    hdd_led: hdd {
        gpios = <&gpio4 RK_PC6 GPIO_ACTIVE_HIGH>;
        default-state = "on";
    };
};

如果外接PM芯片扩展SATA口时,可能需要一个GPIO来复位PM芯片,可进行如下配置,不过当前调试的板子并没有应用到此设计,所以不需要,以下操作为可选项。
kernel/arch/arm64/boot/dts/rockchip/rk3568-nvr-demo-v10.dtsi

&combphy1_usq {
	pinctrl-names = "default";
	pinctrl-0 = <&sata_pm_reset>;
	rockchip,dis-u3otg1-port;
	status = "okay";
};
&pinctrl {
	stata {
		sata_pm_reset: sata-pm-reset {
			rockchip,pins = <4 RK_PD2 RK_FUNC_GPIO &pcfg_output_high>;
		};
	};
};

步骤四,配置板级config文件

kernel/arch/arm64/configs/rockchip_linux_defconfig,需要确保如下配置打开,方可正确的使用 SATA相关功能。

CONFIG_ATA=y
CONFIG_SATA_AHCI=y
CONFIG_SATA_AHCI_PLATFORM=y
CONFIG_PHY_ROCKCHIP_NANENG_COMBO_PHY=y

步骤五,修改驱动

drivers/ata/ahci_platform.c,这是AHCI驱动源码,这部分不需要修改。
drivers/ata/Makefile,查阅被编译的源文件,这部分不需要修改。

测试方法

测试方法一,日志分析

dmesg |grep sata

在这里插入图片描述

观察板子上,SATA接口旁边的LED,亮起状态。

测试方法二,命令测试

fdisk -l

在这里插入图片描述

其他磁盘管理相关命令

lsblk                                  # 查询所有块设备信息,名称|主次设备号|大小|块设备类型|挂载点
cat /sys/block/*/queue/rotational      # 区分HDD与SSD,*代表具体块设备,比如sda。打印1则表示磁盘可旋转,可以判断是HDD;打印0则可能是SSD。
cat /sys/block/sda/removable           # 区分U盘与HDD/SSD。打印1则表示磁盘可移除,可以判断是U盘;打印0则可能是HDD/SSD。
sudo hdparm -I /dev/sda |grep Model    # 查询硬盘的厂商和型号,比如TOSHIBA是东芝,FORESEE是江波龙。

测试方法三,挂载硬盘操作

【查询硬盘和分区详细信息】sudo fdisk -l
【将分区格式化为EXT4格式】mkfs -t ext4  /dev/sda
【挂载硬盘分区到目录】mount /dev/sda /storage
【修改目录权限】chmod 777 /storage

touch /storage/test.log
reboot
cat /storage/test.log

参考内容

调试过程中参考的文章(可以链接方式提供,也可以再次整理),需要重新梳理的一些概念,用到的调试技术。

docs/RK356X/Rockchip_RK356X_Developer_Guide_SATA_CN.pdf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值