Spi芯片抗干扰输出方法

文档序号:6635129阅读:4051来源:国知局
Spi芯片抗干扰输出方法
【专利摘要】本发明公开了SPI芯片抗干扰输出方法,SPI芯片抗干扰输出方法,包括以下步骤:步骤一:在设计硬件时,通过SPI芯片最后一个菊花链输出接口连接到CPU的输入接口,保证SPI芯片输出的数据可以再次回读到CPU;步骤二:在软件设计时,通过SPI芯片最后一个菊花链的Dout引脚回读输出的数据,把相同的数据输进同一个SPI芯片的菊花链网络,在最后一个SPI芯片的输出Dout引脚可以得到前一次的输进的数据;每次把得到的数据进行比较,数据相等则表示当前数据正确,可以输出。
【专利说明】SPI芯片抗干扰输出方法

【技术领域】
[0001]本发明涉及工业自动控制领域,特别是SPI芯片抗干扰输出方法。

【背景技术】
[0002]SPI是一种高速的、全双工、同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,如今越来越多的芯片集成了这种通信协议;SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时),也是所有基于SPI的设备共有的,它们是Din (数据输入)、Dout (数据输出)、CLK (时钟)、CS (片选);不管那种SPI数据通信方式,由于采用的是串行通讯,从SPI芯片一般没有CPU功能,仅仅有数据接收功耗,而SPI串行数据在传输过程中,由于时间跨度很长,导致数据容易受到干扰,任何一个小的干扰错误会引起SPI类型的输出芯片的输出不确定性,可能会导致灾难性结果,甚至人身安全都受到很到的威胁。
[0003]目前,常规的现场总线型的控制器的模拟量输出AO和数字量输出DO都是采用SPI类型的芯片作为输出,在介质上传输的都是数字信号,由于干扰噪音的原因,使得“I”变成了 “0”,“0”变成了 “1”,从而影响到SPI芯片的性能,甚至于SPI芯片不能正常工作。由于我公司的控制器的安装环境复杂,多在火力发电厂、冶炼冶金行业,现场不确定因素多,容易受到干扰,不管从理论分析,还是从经验获得,SPI芯片的抗干扰能力没有校验功能,研究并解决SPI芯片的抗干扰问题非常重要。


【发明内容】

[0004]本发明的目的是提供一种SPI芯片抗干扰输出方法。
[0005]本发明是通过以下技术方案予以实现的:
SPI芯片抗干扰输出方法,包括以下步骤:
步骤一:在设计硬件时,通过SPI芯片最后一个菊花链输出接口连接到CPU的输入接口,保证SPI芯片输出的数据可以再次回读到CPU ;
步骤二 :在软件设计时,通过SPI芯片最后一个菊花链的Dout引脚回读输出的数据,把相同的数据输进同一个SPI芯片的菊花链网络,在最后一个SPI芯片的输出Dout引脚可以得到前一次的输进的数据;每次把得到的数据进行比较,数据相等则表示当前数据正确,可以输出;软件的具体步骤如下:
步骤①:CPU上电后第一次输出到SPI芯片的移位寄存器数据时保存在m_DATA_0UT_CUR,通过SPI_D0UT引脚回读移位寄存器的数据m_DATA_0UT_BACK确认与m_DATA_0UT_CUR相等后,保存在变量中m_DATA_0UT_PRE,然后使能移位寄存器的内容输出到输出控制寄存器,完成一次正确输出;
步骤②:第二次及其以后的输出,比较m_DATA_0UT_CUR是否与m_DATA_0UT_PRE相等,在这里有两种情况: A.相等:则SPI芯片的输出行为与前一次输出行为保持一致,所以不必要输出数据,减少CPU的负担的同时大大降低了干扰的可能性;
B.不相等:通过SPI_DIN口输出数据m_DATA_OUT_CUR同时在SPI_DOUT回读的数据保存在 m_DATA_OUT_BACK,则 m_DATA_OUT_BACK 保存的应该是 m_DATA_OUT_PRE 相等的数据,比较m_DATA_OUT_CUR是否与m_DATA_OUT_PRE相等;不相等则表示受到干扰,这时可以再次输出数据进入SPI芯片直到m_DATA_OUT_CUR与m_DATA_OUT_BACK相等;
步骤③:通过SPI芯片使能输出引脚输出移位寄存器的内容到输出控制寄存器,完成一次正确的输出。

【专利附图】

【附图说明】
[0006]图I是本发明的硬件接口示意图;
图2是本发明的软件设计流程图。

【具体实施方式】
[0007]下面结合附图对本发明的实施例做进一步描述:
如图I所示,在设计硬件时,通过SPI芯片最后一个菊花链输出接口连接到CPU的输入接口,保证SPI芯片输出的数据可以再次回读到CPU ;
如图2所示,SPI芯片通信的结构如下: struct spi_device {
struct spi_master 氺master;//用白勺 master @丰勾
u32 max_speed_hz ; //通讯时钟
u8 chip_select;//片选号,每个 master 支持多个 spi_device
u8 mode;//设备支持的模式,如片选是高or低
#define SPI_CPHA 0x01/* clock phase */
#define SPI_CP0L 0x02/* clock polarity */
#define SPI_M0DE_0 (0 10)/* (original Microffire) */
#define SPI_M0DE_1 (0 | SPI_CPHA)
#define SPI_M0DE_2 (SPI_CP0L|0)
#define SPI_M0DE_3 (SPI_CP0L | SPI_CPHA)
#define SPI_CS_HIGH 0x04/* chipselect active high */
#define SPI_LSB_FIRST 0x08/* per-word bits-on-wire */
#define SPI_3WIRE 0x10/* SI/SO signals shared */
#define SPI_L00P 0x20/* loopback mode */
#define SPI_N0_CS 0x40/*1 dev/bus, no chipselect */
#define SPI_READY 0x80/* slave pulls low to pause */
u8 bits_per_word; //每个字长的比特数
int irq;//中断号
void *controller_state; //控制器寄存器状态
void *controIIer_data;
char modalias[SPI—NAME—SIZE] ; // 设备名称
};
struct spi—master {
struct device dev;//设备模型使用
sl6 bus—num; //master 编号
ul6 num—chipselect; //支持的片选的数量,从设备的片选号不能大于这个数量
ul6 dma—alignment;
/氺 spi_device. mode flags understood by this controller driver 氺/
ul6 mode—bits; //master支持的设备模式
/氺 other constraints relevant to this driver 氺/
ul6 flags;//一些额外的标志
#define SPI—MASTER—HALF—DUPLEX BIT(O)卜 can’t do full duplex */
#define SPI—MASTER—NO—RX BIT(I)/* can’t do buffer read */
#define SPI—MASTER—NO—TX BIT(2)/* can’t do buffer write */
Int (^setup) (struct spi—device *spi) ; // 设置模式、时钟等 int (^transfer) (struct spi—device ^spij // 数据发送函数 struct spi—message *mesg);
/木 called on release () to free memory provided by spi—master 木/
Void (木cleanup) (struct spi—device 木spi);
};
struct spi—transfer {
const void *tx—buf;// 发送缓冲区
void *rx—buf;//接收缓冲区
unsigned len;//缓冲区长度
dma—addr—t tx—dma;
dma—addr_t rx_dma;
unsigned cs—change: I; //当前spi—transfer发送完成之后重新片选
u8 bits—per—word; //每个字长的比特数,0代表使用Spi—device中的默认值
ul6 delay—usees;//发送完成一个spi—transfer后延时时间
u32 speed—hz;//速率
struct list—head transfer—list; //用于链接到 spi—message
};
【权利要求】
1.SPI芯片抗干扰输出方法,包括以下步骤: 步骤一:在设计硬件时,通过SPI芯片最后一个菊花链输出接口连接到CPU的输入接口,保证SPI芯片输出的数据可以再次回读到CPU ; 步骤二:在软件设计时,通过SPI芯片最后一个菊花链的Dout引脚回读输出的数据,把相同的数据输进同一个SPI芯片的菊花链网络,在最后一个SPI芯片的输出Dout引脚可以得到前一次的输进的数据;每次把得到的数据进行比较,数据相等则表示当前数据正确,可以输出;软件的具体步骤如下: 步骤①:CPU上电后第一次输出到SPI芯片的移位寄存器数据时保存在m_DATA_0UT_CUR,通过SPI_D0UT引脚回读移位寄存器的数据m_DATA_OUT_BACK确认与m_DATA_OUT_CUR相等后,保存在变量中m_DATA_OUT_PRE,然后使能移位寄存器的内容输出到输出控制寄存器,完成一次正确输出; 步骤②:第二次及其以后的输出,比较m_DATA_OUT_CUR是否与m_DATA_OUT_PRE相等,在这里有两种情况: A.相等:则SPI芯片的输出行为与前一次输出行为保持一致,所以不必要输出数据,减少CPU的负担的同时大大降低了干扰的可能性; B.不相等:通过SPI_DIN口输出数据m_DATA_OUT_CUR同时在SPI_D0UT回读的数据保存在 m_DATA_OUT_BACK,则 m_DATA_OUT_BACK 保存的应该是 m_DATA_OUT_PRE 相等的数据,比较m_DATA_OUT_CUR是否与m_DATA_OUT_PRE相等;不相等则表示受到干扰,这时可以再次输出数据进入SPI芯片直到m_DATA_OUT_CUR与m_DATA_OUT_BACK相等; 步骤③:通过SPI芯片使能输出引脚输出移位寄存器的内容到输出控制寄存器,完成一次正确的输出。
【文档编号】G06F13/20GK104331381SQ201410668585
【公开日】2015年2月4日 申请日期:2014年11月21日 优先权日:2014年11月21日
【发明者】周晓峰, 胡炎良, 陆坚 申请人:湖南先步信息股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1