news 2026/4/18 13:18:07

GC-IP201 驱动

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
GC-IP201 驱动

数据手册官网上面

https://amac-chemnitz.com/index.php/en/products/interpolationsschaltkreise/93-gc-ip201b-en

STM32F103C8T6


翻译后的是

通信协议:


每个数据传输都通过主机处理器发送一个SPI字来启动。一个SPI字由4位操作码、4位硬件地址和最多8位数据组成。
只有当发送的硬件地址与GC‑IP201(B)存储的硬件地址相匹配时,操作码才会被接受。复位后,IC具有硬件地址
‘0000’。使用SETHWA命令可以将HWA<3:0> 的电压作为新的硬件地址写入IC。用于读取寄存器的操作码将在下一
个SPI访问时将数据输出到MISO,与新的SPI字中的硬件地址无关。

对GC‑IP201(B)中的寄存器进行访问时,以8位写入和16位读取方式进行。IC中的寄存器以32位组织。因此,在IC中
为读取操作实现了一个32位保持寄存器。待读取的数据通过SPI字RD0/ST传输到该保持寄存器。两个最低有效字节
的数据输出到MISO是在下一个SPI周期期间进行的。两个最高有效字节的数据输出到MISO是在RD1字传输到
MOSI后的SPI周期中进行的。通常,读取32位寄存器时依次执行RD0/ST、RD1和NOP指令。连续读取多个寄存器
时可以使用RD0–RD1–RD0–RD1…序列。写入寄存器时,首先使用SPI字WRA设置寄存器地址,然后可通过
WRD进行描述。32位寄存器的写入是逐字节进行的。

通信重点:


在读取寄存器时,32位寄存器数据的传输与IC内部流程同步进行。通过CFG2寄存器中的SYNC值,可以将时间点相
对于ADC采样时间点进行偏移。这样就可以进行等间隔测量,实现低延迟。同步等待期间,MISO输出为低电平。
如果CFG2寄存器中的ASYNC位被设置(异步模式),数据将在SEN信号的上升沿立即存储。与模拟信号的采样时
间失去关联。因此,可以实现更高的传输速度。对于读取MVAL、CNT、POSIT、STAT、CTRLG、CTRLO和
ADC寄存器,SYNC可以设置为任意值。默认值’00000’会导致计算计数值与SPI接口数据输出之间存在较小延迟。对
于读取PHI、DPHI、BQ和CADC寄存器,必须使用’00100’值。

通过配置位CFG3/SPISLOW可以启用对SPI输入信号SEN,SCK和MOSI的数字滤波。此时SCK的最大SPI时钟频率
将被限制在约fOSZ /4。

如何控制呢?

HAL_GPIO_WritePin(GPIOA,NRES_REST_Pin,GPIO_PIN_RESET);//复位HAL_Delay(100);HAL_GPIO_WritePin(GPIOA,NRES_REST_Pin,GPIO_PIN_SET);

我们先说写寄存器

根据协议和驱动信号,可以看到,图15,先写WRA,在写WRD。即可完成寄存器的写入。
根据8.1.2

WRA=0x8000+Adresse WRD=0xA000+Daten
假如,我们写CFG1寄存器,地址0x0C. 根据SPI时序,我们发0X8000 加上地址0x0C.所以我们写入的值是0x800C 一共16位,SPI一次发16位。等待后,根据时序,我们需要发WRD,也就是我们的数据,这样我们就完成了一个0x0C寄存器的写入。

实现代码

HAL_StatusTypeDefGC_IP201_WriteReg(uint8_treg_addr,uint8_tdata){uint16_ttx_data;HAL_StatusTypeDef status;// 1. SEN拉低,发送WRA(地址)HAL_GPIO_WritePin(SPI_NSS_GPIO_Port,SPI_NSS_Pin,GPIO_PIN_RESET);tx_data=0x8000|(reg_addr&0xFF);// WRA: 1000 + 0000 + 8位地址status=HAL_SPI_Transmit(&hspi1,(uint8_t*)&tx_data,1,100);HAL_GPIO_WritePin(SPI_NSS_GPIO_Port,SPI_NSS_Pin,GPIO_PIN_SET);if(status!=HAL_OK){returnstatus;}// 短暂延时(根据时序要求)HAL_Delay(1);// 2. SEN再次拉低,发送WRD(数据)HAL_GPIO_WritePin(SPI_NSS_GPIO_Port,SPI_NSS_Pin,GPIO_PIN_RESET);tx_data=0xA000|(data&0xFF);// WRD: 1010 + 0000 + 8位数据status=HAL_SPI_Transmit(&hspi1,(uint8_t*)&tx_data,1,100);HAL_GPIO_WritePin(SPI_NSS_GPIO_Port,SPI_NSS_Pin,GPIO_PIN_SET);returnstatus;}

我们在说读寄存器

根据图15读32位寄存器,读取需要发送RD0和RD1和NOP。RD0是0xC00C。然后发送0xE000,在发送0x0000。即可

实现代码

uint32_tGC_IP201_ReadReg(uint8_treg_addr){uint16_ttx_data;uint16_trx_low,rx_high;HAL_StatusTypeDef status;// 1. SEN拉低,发送RD0(地址)HAL_GPIO_WritePin(SPI_NSS_GPIO_Port,SPI_NSS_Pin,GPIO_PIN_RESET);tx_data=0xC000|(reg_addr&0xFF);// RD0: 1100 + 0000 + 8位地址status=HAL_SPI_Transmit(&hspi1,(uint8_t*)&tx_data,1,100);HAL_GPIO_WritePin(SPI_NSS_GPIO_Port,SPI_NSS_Pin,GPIO_PIN_SET);if(status!=HAL_OK){return0;}// 短暂延时HAL_Delay(1);// 2. SEN拉低,发送RD1,同时接收低16位数据HAL_GPIO_WritePin(SPI_NSS_GPIO_Port,SPI_NSS_Pin,GPIO_PIN_RESET);tx_data=0xE000;// RD1: 1110 + 0000status=HAL_SPI_TransmitReceive(&hspi1,(uint8_t*)&tx_data,(uint8_t*)&rx_low,1,100);HAL_GPIO_WritePin(SPI_NSS_GPIO_Port,SPI_NSS_Pin,GPIO_PIN_SET);if(status!=HAL_OK){return0;}// 短暂延时HAL_Delay(1);// 3. SEN拉低,发送NOP,同时接收高16位数据HAL_GPIO_WritePin(SPI_NSS_GPIO_Port,SPI_NSS_Pin,GPIO_PIN_RESET);tx_data=0x0000;// NOPstatus=HAL_SPI_TransmitReceive(&hspi1,(uint8_t*)&tx_data,(uint8_t*)&rx_high,1,100);HAL_GPIO_WritePin(SPI_NSS_GPIO_Port,SPI_NSS_Pin,GPIO_PIN_SET);if(status!=HAL_OK){return0;}// 组合32位数据:rx_high(高16位) + rx_low(低16位)return((uint32_t)rx_high<<16)|rx_low;}

此芯片,一个寄存器是32位。
写指定寄存器的32位。

HAL_StatusTypeDefGC_IP201_WriteReg32(uint8_treg_addr,uint32_tdata){HAL_StatusTypeDef status;// 写入低8位status=GC_IP201_WriteReg(reg_addr,data&0xFF);if(status!=HAL_OK)returnstatus;// 写入次低8位status=GC_IP201_WriteReg(reg_addr+1,(data>>8)&0xFF);if(status!=HAL_OK)returnstatus;// 写入次高8位status=GC_IP201_WriteReg(reg_addr+2,(data>>16)&0xFF);if(status!=HAL_OK)returnstatus;// 写入高8位returnGC_IP201_WriteReg(reg_addr+3,(data>>24)&0xFF);}

然后综上所述,配置好相应的寄存器就可以正常使用该芯片了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 3:13:03

‌如何测试AI的“推理深度”?我设计了“五层追问”测试

五层追问不是提问技巧&#xff0c;而是一套可度量、可复用的AI推理测试框架‌ 在AI辅助测试用例生成、缺陷根因分析、自动化决策等场景中&#xff0c;AI的“推理深度”直接决定测试质量的下限。传统评估仅关注输出结果是否正确&#xff0c;而‌“五层追问”测试法‌通过结构化…

作者头像 李华
网站建设 2026/4/18 5:32:46

亚马逊云渠道商:如何在AWS控制台中创建每月成本预算?

随着企业上云规模扩大&#xff0c;AWS 账单意外超支成为常见痛点。据统计&#xff0c;超 80% 的企业因未设置成本预警遭遇费用失控。AWS 每日成本预警功能通过实时监控和自动通知&#xff0c;帮助企业及时干预预算异常。本文介绍如何在AWS控制台中创建每月成本预算&#xff0c;…

作者头像 李华
网站建设 2026/4/18 8:35:43

Java中构建前端可视化维度指标列表:从代码实现到最佳实践

在后端对接前端可视化需求&#xff08;比如雷达图、多维度评分展示&#xff09;时&#xff0c;经常需要把数据库中分散的字段&#xff0c;转换成前端友好的结构化数据格式。今天记录一段典型的“维度指标列表构建代码”&#xff0c;从实现逻辑到优化思路一次性讲透。 一、需求背…

作者头像 李华
网站建设 2026/4/18 6:25:15

汽车制造如何通过质量分析提升整体生产品质与效率?

在智能制造浪潮席卷而来的当下&#xff0c;质量分析早已不是过去那种简单统计报表、事后抽检的环节——它正悄然演变为驱动汽车制造业真正升级的核心引擎。尤其是在汽车这么复杂的产品上&#xff0c;成千上万的零部件、高度定制化的订单&#xff0c;传统那种靠老师傅“摸、看、…

作者头像 李华
网站建设 2026/4/18 6:25:19

LLM动态调参医疗设备故障预警提前30%

&#x1f4dd; 博客主页&#xff1a;Jax的CSDN主页 LLM动态调参&#xff1a;医疗设备故障预警提前30%的范式突破 目录 LLM动态调参&#xff1a;医疗设备故障预警提前30%的范式突破 1. 引言&#xff1a;医疗设备故障的隐性危机 2. 现有预警系统的瓶颈与LLM的破局点 3. LLM动态调…

作者头像 李华
网站建设 2026/4/18 6:25:22

毕业设计项目 基于LSTM的预测算法

文章目录0 简介1 基于 Keras 用 LSTM 网络做时间序列预测2 长短记忆网络3 LSTM 网络结构和原理3.1 LSTM核心思想3.2 遗忘门3.3 输入门3.4 输出门4 基于LSTM的天气预测4.1 数据集4.2 预测示例5 基于LSTM的股票价格预测5.1 数据集5.2 实现代码6 lstm 预测航空旅客数目数据集预测代…

作者头像 李华