CH36X系列芯片Linux系统使用教程

news2024/11/16 23:30:35

一、概述

CH365是一个连接PCI总线的通用接口芯片,CH367/CH368是连接PCI-Express总线的通用接口芯片。支持I/O端口映射、存储器映射、扩展ROM以及中断,提供主动并口、SPI、I2C、GPIO等硬件接口。基于如上芯片可将PCI/PCIe总线转换为简便易用的类似于ISA总线的32位/8位主动并行接口,用于制作PCI/PCIe总线的计算机板卡,以及将原有板卡升级到PCI/PCIe总线上。相较于原产品,速度更快,实时性更好,可控性更佳,适用于高速实时的I/O控制卡、通讯接口卡、数据采集卡等。

本文介绍CH36X系列设备CH365/CH367/CH368等芯片在Linux系统下的使用教程。包括设备驱动的编译与加载、查看设备与驱动工作状态、使用调试软件进行设备的功能演示。

驱动和库文件支持CH36X芯片的IO、MEMORY、CONFIG空间以字节、字、双字三种方式进行读写操作,同时提供了SPI和I2C接口函数,可直接操作EEPROM和FLASH等器件。支持4种中断方式的配置:上升沿、下降沿、高电平、低电平,程序中提供了中断服务函数的注册和实现方法。

开发资料包下载链接:CH36X_LINUX.ZIP - 南京沁恒微电子股份有限公司

资料包含3个目录:

driver:设备驱动程序

lib:开发库

demo:演示程序

该资料适用于PCI总线接口芯片CH365和PCIe总线接口芯片CH367和CH368,需支持其他芯片型号可联系技术支持:tech@wch.cn

二、驱动编译与加载

1、拷贝资料包至系统本地路径并解压

2、打开“终端”应用程序,使用shell命令“cd”切换到driver目录下

3、使用shell命令“make”编译驱动,若编译成功会在目录下生成目标驱动模块“ch36x.ko”

4、动态加载/卸载驱动

加载

sudo make load 或
sudo insmod ch36x.ko

卸载

sudo make unload 或
sudo rmmod ch36x

5、永久加载/卸载驱动

加载

sudo make install

卸载

sudo make uninstall

6、查看设备工作情况

如果设备工作正常,驱动程序将在/dev目录下自动创建名为“ch36xpcix”的字符设备

ls  /dev/ch36xpci*

如上操作不成功时,可使用如下命令查看板卡识别信息

lspci -v 
dmesg

ch365的完整ID为[4348]:[5049],ch367/ch368的VID为[1C00]。 通过lspci -v命令查看设备信息

 以上信息均通过表明设备已被识别且驱动加载成功。

三、硬件展示

演示以CH368EVT评估板为例。

1、评估板实物展示

CH368 评估板主要由 CH368 芯片、排针引出的 IO/MEM/地址/数据信号线、FLASH 芯片、EEPROM 芯片、电源电路以及演示用 LED 组成,用于演示 PCI-Express 总线通用接口芯片CH368 的基本功能:IO 读写、存储器读写、SPI 读写、I2C 读写、配置空间读写以及中断演示等。该评估板还可以测试 CH368 自定义 PCIe 板卡的 ID 功能、调节脉冲宽度以及支持32 位 MEM 宽度读写等。

 

2、元器件说明

P1 是 PCIe 总线,直接插入计算机的 PCIe 插槽。 P2、P3 是 CH368 芯片本地端的控制总线,数据总线,地址总线等信号线引出。 U1(CH368)是 PCI-Express 总线的通用接口芯片。 U2(ASM1117)是1.8V 稳压管,为 CH368 内核提供电源。 U3(24C02)是 I2C 接口 EEPROM,可为 CH368 定制 PCIe 板卡的 ID。如果 CH368 启用外部 ID,则可以在 U2 中自定义供应商标识 VendorID 和设备标识 Device ID 等。如果未设置为外部 ID,则使用 CH368 默认 ID,此时 U3 可以省去。 U4(25F512)是 SPI 接口 FLASH,用来保存应用数据。在不测试 SPI 读写时可以省去。 U5(74LS273)8 位数据/地址锁存器,用来锁存 I/O 端口的数据。 U6(7805) LDO 稳压到5V。

JP1 为 CH368 电源选择: 1-2 短接 CH368 通过 PCIE 3.3V 供电,默认2-3 连接。 2-3 短接 CH368 通过 PCIE 3.3Vaux 供电,当系统关机后,CH368 不断电,可通过 WAKEIN 信号唤醒计算机(需要软件支持)。 JP2 为输出电源选择 1-2 短接输出5V 电压给 P3 所接外设供电。 2-3 短接输出3.3V 电压。

F1 是保险丝 C1、C17 是100UF 电源退耦电容。 C2、C4 是10UF 电源退耦电容。 C3、C5~C16、C18~C23 为0.1UF 电源退偶电容。 RP1~PR3 为2K 欧姆排阻,用于限流。 RP4~RP19 为200 欧姆排阻。 R1、R2 为0 欧姆电阻,其中 R2 用于支持 PCIe 唤醒信号线,不用时可以省去。 R3 为外接12KΩ电阻到 GND,用于系统参考电流输入。 R5 10K 欧姆电阻 L1~L11 为 LED,用于演示总线 I/O 写、通用输入输出信号读写,对应的信号包括: INT/SDX/SCL/SDA/SCS/ADDR/RSTO。

四、功能演示

1、打开“终端”应用程序,使用shell命令“cd”切换到demo目录下

2、使用gcc/g++编译应用程序,如下所示:

gcc ch36x_demo.c ch36x_lib.c -o ch36xdebug

3、运行目标可执行文件

sudo ./ch36xdebug

软件会自动打开/dev/ch36xpci0设备节点,若出现打开失败,可参考第一章检查硬件和驱动是否工作正常。

4、设备信息展示

系统为CH36X设备分配的IO基地址、Memory基地址以及中断号

5、配置空间读写演示

  • a-功能 支持字节读/写访问配置空间。

  • b-实现 使用 demo程序可以演示“配置空间读写”功能。

  • c-验证 根据 CH368 芯片手册输入对应的配置空间地址,检查回读对应数据。

  • d-注意 配置空间的位属性不同,有些完全只读、有些可读可写、有些只读但可以事先设定等等,具体请参照 CH368 芯片手册。

  • e-demo程序演示 根据菜单信息提示输入C进入配置空间读写。读取到偏移地址为01H的数据为1CH

对比手册后验证读取成功

6、IO读写功能演示

  • a-功能 ​ CH368 支持以字节/字/双字为单位对 I/O 端口访问,支持直接地址/偏移地址访问I/O 端口。

  • b-实现 ​ 使用 demo程序可以演示通过偏移地址对 I/O 端口进行访问。

  • c-验证 ​ U5 可以用于简单测试 I/O 输出功能,CH368 的任何 I/O 的输出数据都会在 IOWR脉冲结束时被锁存器 U5 保存,然后驱动 L1~L4 这4 个 LED,显示 I/O 数据端口D3~D0 位的状态。灯亮代表1,灯灭代表0。第二种方法可使用逻辑分析仪/示波器等硬件仪器监控总线数据(参考以下测试举例)。

  • d-注意 ​ 当选择字,双字模式进行读写 IO 时,输入的地址和长度需分别为2 和4 的倍数,块读写的最大长度为32K。

  • e-demo程序演示 ​ 偏移地址0x00~0XE7为标准本地IO端口,通过D0 ~ D31双向数据信号线输入输出,双向数据线内置上拉电阻默认为高电平,进行IO写功能时,数据总线D0~D7会直接输出信号,可通过LED直接观察输出结果。

    测试IO读功能时,可将D0数据线接,此时D7~D0位数据为1111 1110(0xFE),demo演示读取一个字节的数据进行对比

IO写数据演示:往IO空间00端口写入数据0x05,使用逻辑分析仪抓取D3~D0数据位的值为0101验证写数据成功。

7、Memory读写功能演示

  • a-功能 和 IO 读写功能类似,CH368 支持以字节/字/双字为单位对 Memory 进行读写。

  • b-实现 使用 demo程序可以演示Memory读写功能。

  • c-验证 可连接外部 Memory器件来写入和回读数据,当不连接外设时可使用逻辑分析仪/示波器等硬件仪器监控总线数据(参考以下测试举例)。

  • d-注意 选择双字进行读写时,输入的地址和数据长度需为4的倍数,输入的地址和数据长度的和应小于等于0x7FFF。

  • e-demo程序演示 以字节为单位写数据03H,硬件上逻辑分析仪连接双向数据线D0~D3抓取输出值为0011,验证写数据成功。

 双向数据端口D0~D31默认高电平,将D0接地拉低电平,此时进行Memory读取信号线D7~D0的数据为1111 1110(0xFE),利用demo程序读取验证

 8、 SPI 操作演示

  • a-功能 ​ CH368 支持 SPI 接口与外设通讯。

  • b-实现 ​ 使用 demo程序可以演示读/写/擦除 FLASH 数据。

  • c-验证 ​ 除了读/写/擦除 FLASH 芯片25F512(U4)外,还提供选择 IO 模式 SPI3/SPI4 和时钟频率15.6MHz/31.3MHz 的设置。

  • d-注意 ​ 不同品牌和型号的 FLASH 芯片,协议可能有不同,需要参考 FLASH 芯片手册。

  • e-demo程序演示 ​ 评估板上 SPI默认连接FLASH,通过发送读取 FLASH ID 指令接收回传信息判断SPI是否能正常通信,一次发送4个字节数据:[0x90 0x00 0x00 0x00],再读取两个字节信息,得到FLASH ID为:[0xef 0x12]

​ 进行FLASH数据读写时需要输入起始地址0x00,写入字符串“1234567890”,再从起始地址连续读取10个字节验证写入数据是否成功。

 注:FLASH的数据写入需要先进行数据擦除,保证写入前内容为0xFF。

 

9、EEPROM操作演示

  • a-功能 ​ CH368 支持 I2C 接口与外设通讯,支持读/写 EEPROM。

  • b-实现 ​ 使用 demo程序可以演示24CXX 中数据的变化。

  • c-验证 ​ 外接配置芯片24CXX 是非易失串行 EEPROM 存储器,除了向 CH368 提供配置信息之外,还可以供应用程序自行保存一些其它参数。

  • d-注意 ​ CH368 支持以下型号的24CXX 芯片:24C01(A)、24C02、24C04、24C08、24C16 等。如果不需要修改芯片的 ID 时,外部配置芯片有效标志不能为78H,具体参考CH368芯片手册。

  • e-demo程序演示

    根据菜单提示信息输入从机地址0x50,选择从机寄存器起始地址0x00,输入发送字符串“0987654321”,再选择读取10个字节。

10、中断功能演示

  • a-功能 ​ CH368 支持电平/边沿2 种中断类型,可以通过库函数设置中断类型,详细说明请查看 CH368 芯片手册中断寄存器和硬件中断的相关说明。

  • b-实现 ​ 使用 demo 程序可以演示中断功能。

  • c-验证 ​ 程序通过控制引脚A15输出电平信号,当INT#引脚接收到电平或边沿信号后触发中断,进入中断服务开始计数。示例采用上升沿有效的边沿触发方式。

  • d-注意 ​ 启用中断功能需要硬件上将A15引脚和INT#引脚相连

  • e-demo程序演示 ​ 通过控制A15引脚输出高低电平触发中断,程序中设置上升沿触发,中断触发后执行服务函数打印中断触发次数。

  • 第一步读取IO杂项控制寄存器0XF8的值为0xb0,判断出A15引脚此时的电平状态为低电平

  • 第二步输入菜单键 e 打开中断

  • 第三步对杂项控制寄存器写入数据0xB9(位0=1)来控制A15引脚输出高电平

  • 第四步终端输出中断服务函数执行信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/83034.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

R语言使用Rasch模型分析学生答题能力

最近我们被客户要求撰写关于IRT的研究报告,包括一些图形和统计输出。几个月以来,我一直对序数回归与项目响应理论(IRT)之间的关系感兴趣。 在这篇文章中,我重点介绍Rasch分析。 最近,我花了点时间尝试理解…

今天面了个阿里拿 38K 出来的,让我见识到了基础的天花板

前言 人人都有大厂梦,对于程序员来说,BAT 为首的一线互联网公司肯定是自己的心仪对象,毕竟能到这些大厂工作,不仅薪资高待遇好,而且能力技术都能够得到提升,最关键的是还能够给自己镀上一层金,…

【数集项目之 MCDF】(二) 从输入端 slave_FIFO

由于slave_FIFO调用了子模块同步FIFO SCFIFO.v,因此首先简单介绍同步FIFO的设计。 第一节 同步FIFOSCFIFO设计 同步FIFO实体是一组存储单元,因此需要先用数组方式来实现 reg [DATA_WIDTH - 1 : 0] fifo_buffer[DATA_DEPTH - 1 : 0]; 其中在参数中进行…

【随机分形搜索算法】一种新的全局数值优化的适应度-距离平衡随机分形搜索算法FDB-SFS附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

模型精度再被提升,统一跨任务小样本学习算法 UPT 给出解法!

近日,阿里云机器学习平台PAI与华东师范大学高明教授团队、达摩院机器智能技术NLP团队合作在自然语言处理顶级会议EMNLP2022上发表统一多NLP任务的预训练增强小样本学习算法UPT(Unified Prompt Tuning)。这是一种面向多种NLP任务的小样本学习算…

【HMS Core】运动健康服务上传平台的健康数据,能否获取到上传设备的SN码或者唯一设备码信息

问题描述 上传平台的健康数据,能否获取到上传设备的SN码或者唯一设备码信息 解决方案 DeviceInfo中包含华为设备唯一标识,您可以通过DeviceInfo进行查看。 DeviceInfo Android API:https://developer.huawei.com/consumer/cn/doc/developm…

价值年薪50W的软件测试进阶学习路线,终于让我从阿里P8手里抠出来了

作为一个男人我感觉必须得做点什么来证明一下自己,现在我又回来了,准备把自己的节操准备补一下。另外给各位未来的自动化测试工程师和测试开发工程师说一句,别的我不清楚,学习编程请从一而终 咱们学习编程就挺难的,有…

Matplotlib学习笔记(第二章 2.14 图像教程)

2.1.4 图像教程 使用Matplotlib绘制图像的简短教程。 启动命令 首先,让我们开始IPython。它是对标准Python提示符的最优秀的增强,它与Matplotlib结合得特别好。直接在shell上启动lPython,或者使用Jupyter笔记本(其中IPython作为运行的内核…

为什么 Android 要采用 Binder 作为 IPC 机制?

前言 Android 系统为了安全、稳定性、内存管理等原因,Android 应用和系统服务都是运行在独立的进程中的,但系统服务与应用进程之间,应用进程A与应用进程B之间需要通信和数据共享的。因此,Android 系统需要提供一套能够高效、安全…

js 踩了正则表达式的大坑!lastIndex属性

参考文章 踩坑情景 今天一来,被测试测出了一个问题,在使用vantUI的移动端项目中,我虽然对用户输入的值做了去除首尾空格的操作,但却忘记对用户输入的空值进行错误提示,fine,我选择给表单添加rules规则&am…

[附源码]JAVA毕业设计远程教学系统录屏(系统+LW)

[附源码]JAVA毕业设计远程教学系统录屏(系统LW) 项目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术…

40个高质量SSM毕设项目分享【源码+论文】

文章目录前言 题目1 : 基于SSM的房屋出租出售系统 <br /> 题目2 : 基于SSM的房屋租赁系统 <br /> 题目3 : 基于SSM的个人健康信息管理系统 <br /> 题目4 : 基于SSM的共享充电宝管理系统 <br /> 题目5 : 基于SSM的即动运动网站 <br />前言 &…

【C语言数据结构(基础篇)】第二站:顺序表

目录 一、线性表 二、顺序表的实现&#xff08;概念以及静态顺序表&#xff09; 1.创建三个工程文件 2.顺序表的概念 3.顺序表的定义 4.初始化顺序表 5.静态顺序表的尾插 三、顺序表的实现&#xff08;升级为动态顺序表&#xff09; 1.动态顺序表的定义 2.动态顺序表的…

艾美捷NCTC-135培养基化学性质和基本配方

艾美捷NCTC-135培养基背景&#xff1a; NCTC培养基&#xff0c;由马里兰州贝塞斯达国家癌症研究所&#xff08;NCI&#xff09;生物实验室组织培养科开发&#xff0c;用于建立和维持L929小鼠细胞株。 艾美捷NCTC-135培养基化学性质&#xff1a; 外观&#xff1a;白色至浅粉色…

[附源码]Python计算机毕业设计Django超市商品管理

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Android -- 每日一问:谈谈MVC、MVP和MVVM模式,你有在自己的项目中使用过吗?

经典回答 MVC 模式 全名是Model–View–Controller&#xff0c;是模型(model)&#xff0d;视图(view)&#xff0d;控制器(controller)的缩写&#xff0c;一种软件设计典范&#xff0c;用一种业务逻辑、数据、界面显示分离的方法组织代码&#xff0c;在改进和个性化定制界面及用…

[附源码]Python计算机毕业设计SSM基于的高速收费系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

防火墙双机热备配置实验

目录 一、实验拓扑 二、配置云 三、配置防火墙 四、分配FW的接口地址与安全区域 五、按图示进行配置 六、双机热备的配置 七、配置NAT 八、模拟双机热备的切换 一、实验拓扑 看上去挺复杂的其实这个实验还是比较简单的&#xff0c;Client1配置为IP 10.3.0.10 网关10.3.…

python教程十二 字典

字典 字典是另一种可变容器模型&#xff0c;且可存储任意类型对象。 字典的每个键值 key>value 对用冒号 : 分割&#xff0c;每个对之间用逗号(,)分割&#xff0c;整个字典包括在花括号 {} 中 ,格式如下所示&#xff1a; d {key1 : value1, key2 : value2, key3 : value3…

学会模态计算,你就掌握了结构振动冲击计算的核心

模态计算对于认识结构振动特性至关重要&#xff0c;通过模态计算可以得到模态的固有频率&#xff0c;振型&#xff0c;参与系数和有效质量等参数&#xff0c;模态计算的这些参数我们应该很熟悉&#xff0c;但是如果正确合理的使用这些结果指导工程计算&#xff0c;是我们今天讨…