【经验】地平线SOC X3M电源域IO-DOMAIN调试使用方法
地平线SOC X3M各个模块能正常工作,前提是各个模块有稳定的电源,IO-Domain可以对各个模块的电源进线统一管理。以RGMII接口为例,如果电路设计时外接电压域为3.3V,则需要配置RGMII模块的IO-DOMAIN为3.3V,如果电路设计时外接电压域为1.8V,则需要配置为1.8v,需要注意的是:外接电压域为3.3V而对应的IO-DOMAIN配置为1.8V时,可能会对芯片有损伤;外接电压域为1.8V而对应的IO-DOMAIN配置为3.3V时,相应的模块可能无法正常工作。
1.管脚查询
IO管脚的复用和配置可以查阅《PL-2500-3-X3 PIN SW Reg-V1.2.xls》和《RM-2500-5-X3M Register Reference Manual-GPIO&PIN-V1.1.pdf》。
在《PL-2500-3-X3 PIN SW Reg-V1.2.xls》可以比较直观的查询到管脚的上电默认状态、复用、驱动能力、上下拉、施密特触发配置。
在《RM-2500-5-X3M Register Reference Manual-GPIO&PIN-V1.1.pdf》文档中查阅SD_MODE_CTRL和IO_MODE_CTRL两个寄存器来确定电压域配置。
2.驱动代码
代码位置如下:
drivers/pinctrl/pinctrl-single.c # pinctrl 驱动代码源文件
include/linux/platform_data/pinctrl-single.h # pinctrl 驱动代码头文件
(1). IO-DOMAIN的DTS
/* arch/arm64/boot/dts/hobot/hobot-pinctrl-xj3.dtsi */
/* pinctrl_voltage used to config X/J3 pin mode, for example,
* when SD2 external power supply is 3.3v, we need config pin-mode to
* 3.3v, otherwise X/J3 chip will be damaged.
* when SD2 external power supply is 1.8v, we need config pin-mode to
* 1.8v, otherwise SD2 will not work.
*/
pinctrl_voltage: pinctrl_voltag@0xA6003000 {
compatible = "pinctrl-single";
reg = <0x0 0xA6003170 0x0 0x8>;
#pinctrl-cells = <2>;
#gpio-range-cells = <0x3>;
pinctrl-single,bit-per-mux;
pinctrl-single,register-width = <32>;
pinctrl-single,function-mask = <0x1>;
status = "okay";
/* rgmii 1.8v func */
rgmii_1_8v_func: rgmii_1_8v_func {
pinctrl-single,bits = <
0x4 MODE_1_8V RGMII_MODE_P1
0x4 MODE_1_8V RGMII_MODE_P0
>;
};
/*rgmii 3.3v func */
rgmii_3_3v_func: rgmii_3_3v_func {
pinctrl-single,bits = <
0x4 MODE_3_3V RGMII_MODE_P1
0x4 MODE_3_3V RGMII_MODE_P0
>;
};
...
};
由于IO-DOMAIN在Pinctrl-single的框架下实现,因此其DTS和Pinctrl的类似,在IO-DOMAIN的DTS里已经列出了所有模块1.8V和3.3V的配置组,客户一般不需要修改,在具体开发时根据实际情况选择使用即可。
(2).驱动调用时DTS配置
和Pinctrl的使用方法类似,驱动在自己的DTS中引用需要配置的IO-DOMAIN,以bt1120驱动为例,配置如下:
xxx: xxx@0xA6000000 {
...
pinctrl-names = "default", "xxx_voltage_func", ;
pinctrl-0 = <&xxx_func>;
pinctrl-1 = <&xxx_1_8v_func>; // pinctrl-3为1.8v的IO-DOMAIN配置
...
};
(3).驱动调用示例代码
和Pinctrl调用方法一致,驱动先通过Pinctrl-names查找对应的pinctrl state,然后再切换到对应的state。
static int hobot_xxx_probe(struct platform_device *pdev)
{ ...
g_xxx_dev->pinctrl = devm_pinctrl_get(&pdev->dev);
if (IS_ERR(g_xxx_dev->pinctrl))
{
dev_warn(&pdev->dev, "pinctrl get none\n");
g_xxx_dev->pins_voltage = NULL; }
...
/* 按照pinctrl-names lookup state */
g_xxx_dev->pins_voltage = pinctrl_lookup_state(g_xxx_dev->pinctrl, "xxx_voltage_func"); if (IS_ERR(g_xxx_dev->pins_voltage))
{
dev_info(&pdev->dev, "xxx_voltage_func get error %ld\n", PTR_ERR(g_xxx_dev->pins_voltage));
g_xxx_dev->pins_voltage = NULL;
}
...
/* select state */
if (g_xxx_dev->pins_voltage)
{
ret = pinctrl_select_state(g_xxx_dev->pinctrl, g_xxx_dev->pins_voltage);
if (ret)
{
dev_info(&pdev->dev, "xxx_voltage_func set error %d\n", ret);
}
}
...
}
(4).uboot下修改电压域
在uboot源码board/hobot/xj3/xj3.c文件中,根据硬件实际电压情况,调用init_io_vol接口配置电压域,如果硬件上面管脚的电源域是1.8v那么改管脚对应的位是1,如果是3.3v则该管脚对应的bit是0,最后面把拼成的16进制值value写入base+0x170和base+0x174中(base: 0xA6003000),寄存器详细说明可以查阅《RM-2500-5-X3 Register Reference Manual-GPIO&PIN-V1.1.pdf》
int init_io_vol(void)
{
uint32_t value = 0;
uint32_t base_board_id = 0;
struct hb_info_hdr *bootinfo = (struct hb_info_hdr*)HB_BOOTINFO_ADDR;
hb_board_id = bootinfo->board_id;
/* work around solution for xj3 bring up ethernet, * all io to v1.8 except bt1120 * BIFSPI and I2C2 is 3.3v in J3DVB, the other is 1.8v */
/*
* 1'b0=3.3v mode; 1'b1=1.8v mode
* 0x170 bit[3] sd2
* bit[2] sd1
* bit[1:0] sd0
* * 0x174 bit[11:10] rgmii
* bit[9] i2c2
* bit[8] i2c0
* bit[7] reserved
* bit[6:4] bt1120
* bit[3:2] bifsd
* bit[1] bifspi
* bit[0] jtag
*/
value = 0xF0F;
base_board_id = hb_base_board_type_get();
if (base_board_id == BASE_BOARD_J3_DVB)
{
value = 0xD0D;
}
writel(value, GPIO_BASE + 0x174);
writel(0xF, GPIO_BASE + 0x170); return 0;
}
- |
- +1 赞 0
- 收藏
- 评论 0
本文由孟高祥提供,版权归世强硬创平台所有,非经授权,任何媒体、网站或个人不得转载,授权转载时须注明“来源:世强硬创平台”。
相关推荐
地平线旭日X3系列智能芯片开发经验资料汇总
旭日X3 是地平线针对 AIoT 场景,推出的新一代低功耗、高性能的智能芯片;集成了地平线最先进的伯努利2.0 架构引擎( BPU® )。包含 X3M 和 X3E 两颗芯片,X3M 主要面向 8M 智能前视市场和边缘计算,提供 5TOPS 算力;X3E 主要面向 5M 智能前视市场,提供 3TOPS 算力。
【经验】地平线ISP工具Control tool的使用方法介绍
Control tool是isp-tuning时tuning ISP参数的图形界面工具,对于刚接触地平线的开发者来说,会比较陌生,下面详细介绍Control tool的使用方法。
【经验】地平线X3M SDB开发板烧录ubuntu镜像实操和注意事项
地平线X3M SDB开发板,地平线论坛已经支持yocto linux和ubuntu两种SDK包,本文实操烧录ubuntu镜像以及说明注意事项。
【应用】地平线AI SoC芯片X3ME00IBGTMB-H用于3D相机,集成四核Cortex A53 CPU
3D相机应用领域越来越广泛,除了常见的3D影片之外,还可以应用于物流自动化、机器人视觉、障碍检测等方面。3D相机是有两个镜头的,分别是用于拍摄场景和测量自身与场景内物体之间的距离。镜头获取信息需要一个强大芯片来处理,本文介绍一款SOC可用于3D相机上。
引领行业筑牢安全基线,地平线主动安全产品获评功能安全应用典型案例
在2024年中国汽车工程学会年会(SAECCE 2024)期间,由中国汽车工程学会智能网联汽车安全分会组织的“2024年智能网联汽车功能安全应用典型案例”评选结果正式公布。凭借在技术创新、产品应用方面的典型性和领先性,地平线主动安全产品Horizon Mono™ (以下简称 Mono)荣获“2024年智能网联汽车功能安全应用典型案例”。
AI加速边缘计算,聚焦AIOT芯片,NPU SOC,离线语音MCU,高算力智能模组等
世强硬创联合地平线,阿普奇,启英泰伦,美格智能,普林芯驰,唯创知音,九芯电子,芯闻,VINKO,MERRY带来AI新产品,聚焦AIOT芯片,NPU SOC,离线语音MCU,高算力智能模组等,加速边缘计算。
【应用】地平线新一代AIoT AI SOC X3ME00IBGTMB-H成功用于AI分析盒子,提供5TOPS的算力
在盒子的主控方面,客户采用的是地平线的新一代AIoT AI SOC 旭日3系列X3ME00IBGTMB-H,这是地平线针对 AIoT 场景,推出的新一代低功耗、高性能的智能芯片,集成了地平线最先进的伯努利2.0 架构引擎( BPU® ),可提供5TOPS的算力。
Sunrise3.0(X3M)规格书
描述- 本资料为Horizon Robotics的Sunrise 3.0(X3M)芯片的数据手册。该文档详细介绍了X3M芯片的技术规格、功能特性、硬件架构和应用场景。内容包括芯片块图、引脚描述、电气规范、接口时序、系统架构、CPU子系统、DDR子系统、VIO子系统、BPU子系统、VSP子系统和PERI子系统等。
型号- X3M
【应用】地平线推出基于AI SoC X3M的扫地机方案,提供配套TROS操作系统和AI算法
地平线推出基于Sunrise®旭日芯片的扫地机方案,提供芯片+操作系统+算法的完整解决方案,实现更智能、更稳定、更主动的智能扫地机应用。
地平线高性能大算力整车智能计算平台暨战略发布会精彩回顾 ∣视频
征程与共,一路同行。
【应用】算力高达5TOPS的SOC X3ME00IBGTMB-H用于双目AI相机设计,满足输入图像的图像信号处理要求
某客户做一款双目AI相机,需要跑自己的识别算法,用于识别一些物体,算法是自研的,视频输出部分要求分辨率达到4K级别。在相机处理器上需要一款有一定算力和多路视频处理能力的芯片,客户采用地平线的旭日3系列AI SOC X3ME00IBGTMB-H,该款芯片性能强大,算力和视频处理能力均能满足需求。
【应用】地平线AI SoC芯片X3M助力智能停车场系统设计,可实现车牌识别、车流量检测等功能,算力可达5Tops
现在,随着智能芯片、算法的技术发展,方便快捷、稳定可靠的非接触式智能停车设备已走进大大小小的城市,成为当今停车场设备的主流。地平线推出的X3M系列AI SoC芯片,可应用于停车场的智能识别设备,用来检测施工车辆的车牌、类别,并可实现计算车流量的功能。
电子商城
现货市场
登录 | 立即注册
提交评论