0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

MAX14915八通道、工業(yè)、高邊開關(guān)CRC編程指南

星星科技指導(dǎo)員 ? 來源:ADI ? 作者:ADI ? 2023-02-21 16:14 ? 次閱讀

MAX14915為高性能、8通道、工業(yè)高邊開關(guān),具有豐富、先進(jìn)的功能集。SPI接口允許微控制器監(jiān)視和控制MAX14915的大部分方面。為了增強(qiáng)魯棒性,MAX14915中的硬件循環(huán)冗余校驗(yàn)(CRC)電路可以選擇保護(hù)其與微控制器之間的所有數(shù)據(jù)通信,防止誤碼。然而,在MAX14915中啟用CRC功能是不夠的。微控制器還必須在軟件中實(shí)現(xiàn)相同的CRC算法,既要為發(fā)送到MAX14915的數(shù)據(jù)附加校驗(yàn)位,又要驗(yàn)證從MAX14915接收的數(shù)據(jù)。實(shí)現(xiàn)此目的的一種方法是檢查數(shù)據(jù)手冊(cè)并使用它來創(chuàng)建自定義固件以實(shí)現(xiàn)必要的CRC功能。為了提供更快且經(jīng)過驗(yàn)證的解決方案,本應(yīng)用筆記中提供了一系列功能。它們是用C語言編寫的,應(yīng)該很容易移植到任何常見的微控制器上。

串行接口上的CRC錯(cuò)誤檢測

MAX14915串行數(shù)據(jù)的CRC錯(cuò)誤檢測可以啟用,以盡量減少由于SDISDO信號(hào)的數(shù)據(jù)損壞而導(dǎo)致的錯(cuò)誤操作或錯(cuò)誤信息。如果使能錯(cuò)誤檢測,通過設(shè)置CRCEN引腳= 1,MAX14915執(zhí)行以下操作:

對(duì)從微控制器接收的SDI數(shù)據(jù)執(zhí)行錯(cuò)誤檢測,以及

計(jì)算發(fā)送到微控制器的SDO數(shù)據(jù)的CRC,并將校驗(yàn)字節(jié)附加到發(fā)送到微控制器的SDO診斷/狀態(tài)數(shù)據(jù)

這可確保從微控制器接收的數(shù)據(jù)(設(shè)置/配置)和發(fā)送到微控制器的數(shù)據(jù)(診斷/狀態(tài))出現(xiàn)未檢測到錯(cuò)誤的可能性較低。

CRC 錯(cuò)誤檢測支持SPI尋址和菊花鏈操作模式,以及標(biāo)準(zhǔn)和突發(fā)讀/寫周期。

SDI(讀取周期)上的輸入數(shù)據(jù)

將 CRCEN 輸入設(shè)置為高電平可啟用 CRC 錯(cuò)誤檢測。CRC 幀校驗(yàn)序列 (FCS) 隨每個(gè)串行事務(wù)一起發(fā)送。5 位 FCS 基于生成器多項(xiàng)式 X5+ X4+ X2+ 1,CRC 起始值 = 11111。當(dāng)CRC使能時(shí),MAX14915期望在接收的SDI程序/配置數(shù)據(jù)后附加一個(gè)校驗(yàn)字節(jié)。圖 1 顯示了校驗(yàn)字節(jié)格式。

pYYBAGP0gK2ASrngAAArhcf36iI255.png

圖1.微控制器的SDI檢查字節(jié)。

5位FCS位CRC[4:0]是根據(jù)一個(gè)SPI命令中發(fā)送的所有數(shù)據(jù)計(jì)算的,包括校驗(yàn)字節(jié)MSB中的三個(gè)“0”。因此,在突發(fā)命令的情況下,CRC 的計(jì)算范圍為 8+3 位到 24+3 位。CRC0是FCS的LSB。

MAX14915驗(yàn)證接收到的FCS位,如果未檢測到錯(cuò)誤,MAX14915設(shè)置OUT_輸出開關(guān)和/或根據(jù)SDI數(shù)據(jù)更改器件配置。如果檢測到CRC錯(cuò)誤,MAX14915不會(huì)改變OUT_輸出和/或器件配置。相反,MAX14915將COMERR邏輯輸出設(shè)置為低電平,即COMERR輸出晶體管漏極開路導(dǎo)通。

如果掩模寄存器設(shè)置為使能全局故障寄存器中的CRCfault位,MAX14915還將FAULT引腳設(shè)置為低電平,為微控制器提供中斷,以進(jìn)一步指示SPI接口上的通信錯(cuò)誤。

SDO(寫入周期)上的輸出數(shù)據(jù)

當(dāng)DAISY引腳為低電平時(shí),MAX14915附加到SDO數(shù)據(jù)的檢查字節(jié)的格式如圖2所示:

poYBAGP0gLKAR4krAAAuniGF4Oc851.png

圖2.MAX14915在尋址SPI模式下發(fā)送SDO檢查字節(jié)。

A1 和 A0 是 A1 和 A0 引腳的電平,而 THERR 位是在發(fā)生芯片熱關(guān)斷事件時(shí)設(shè)置的。CRC[4:0]是MAX14915根據(jù)SDO數(shù)據(jù)計(jì)算的1個(gè)CRC位,包括A0、A14915和THERR值。這允許微控制器檢查從MAX<>接收的SDO數(shù)據(jù)是否存在錯(cuò)誤。

源代碼

本應(yīng)用筆記提供了實(shí)現(xiàn)CRC生成器和CRC檢查器的C源代碼。MAX14915使用單字節(jié)或雙字節(jié)包與微控制器通信。源代碼為每種情況提供了一個(gè)編碼器和解碼器:

CRC5encode_2byte(用于傳輸 2 個(gè)字節(jié))

CRC5encode_1byte(用于傳輸 1 字節(jié))

CRC5check_2byte(用于檢查MAX2的14915字節(jié)響應(yīng))

CRC5check_1byte(用于檢查MAX1的14915字節(jié)響應(yīng))

除了選擇單字節(jié)或雙字節(jié)數(shù)據(jù)包與MAX14915通信外,請(qǐng)注意,在這些代碼示例中,“byte”是8位無符號(hào)值的別名,有時(shí)以不同的方式標(biāo)記,例如UINT8。

Send1為第一個(gè)字節(jié),send2為第二個(gè)字節(jié),發(fā)送至MAX14915。代碼應(yīng)先發(fā)送1,后發(fā)送2,再crc_code至MAX14915。

crc_code = crc5encode (send1, send2);

用戶應(yīng)通過SPI接口發(fā)送3個(gè)字節(jié),先發(fā)送1,后跟send2,然后發(fā)送crc_code。當(dāng)微控制器通過SPI接口將配置設(shè)置發(fā)送到MAX14915時(shí),MAX14915同時(shí)將狀態(tài)信息返回給微控制器。這是檢查從MAX14915接收的crc_code是否正確的方法:

crc_ret = crc5decode (ret1, ret2);

字節(jié)結(jié)果“crc_ret”應(yīng)與MAX14915接收的第三個(gè)字節(jié)相同。

圖 3 和圖 4 顯示了 C 函數(shù)注釋中提到的數(shù)據(jù)位置。下載電子表格

poYBAGP0fYGAb0m7AAFBDeS7XD8226.png?imgver=1

圖3.CRC5數(shù)據(jù)發(fā)送到SDI上的MAX14915。

pYYBAGP0fYiAbDT8AAEuKV_sNC0891.png?imgver=1

圖4.MAX5在SDO上發(fā)送的CRC14915數(shù)據(jù)。

public byte crc5encode(byte BYTE1, byte BYTE2)
{
byte crc5_start = 0x1f;
byte crc5_poly = 0x15;
byte crc_result = crc5_start;

// BYTE1
for (int i=0; i<8; i++)
{
if( ((( BYTE1>>(7-i) ) &0x01) ^ ((crc_result & 0x10)>>4)) > 0 ) // IF(XOR(C6;BITAND(D5;2^4)/2^4)
{ crc_result = (byte) (crc5_poly ^ ((crc_result<<1) & 0x1f)); } // BITXOR($D$1;BITAND((D5*2);31))
else
{ crc_result = (byte)((crc_result<<1) & 0x1f); } // shift left, keep only lower 6 bits
}

// BYTE2
for (int i=0; i<8; i++)
{
if( ((( BYTE2>>(7-i) ) &0x01) ^ ((crc_result & 0x10)>>4)) > 0 ) // IF(XOR(C6;BITAND(D5;2^4)/2^4)
{ crc_result = (byte) (crc5_poly ^ ((crc_result<<1) & 0x1f)); } // BITXOR($D$1;BITAND((D5*2);31))
else
{ crc_result = (byte)((crc_result<<1) & 0x1f); } // shift left, keep only lower 6 bits
}

// 3 extra bits set to zero
byte BYTE3=0x00;
for (int i=0; i<3; i++)
{
if( ((( BYTE3>>(7-i) ) &0x01) ^ ((crc_result & 0x10)>>4)) > 0 ) // IF(XOR(C6;BITAND(D5;2^4)/2^4)
{ crc_result = (byte) (crc5_poly ^ ((crc_result<<1) & 0x1f)); } // BITXOR($D$1;BITAND((D5*2);31))
else
{ crc_result = (byte)((crc_result<<1) & 0x1f)); } // shift left, keep only lower 6 bits
}
return crc_result;

}
byte crc5_decode(byte BYTE1, byte BYTE2)
{
byte crc5_start = 0x1f;
byte crc5_poly = 0x15;
byte crc_result = crc5_start;

// BYTE1

for (int i=2; i<8; i++)

{

if( ((( BYTE1>>(7-i) ) &0x01) ^ ((crc_result & 0x10)>>4)) > 0 ) // IF(XOR(C6;BITAND(D5;2^4)/2^4)

{ crc_result = (byte) (crc5_poly ^ ((crc_result<<1) & 0x1f)); } // BITXOR($D$1;BITAND((D5*2);31))

else

{ crc_result = (byte)((crc_result<<1) & 0x1f); } // shift left, keep only lower 6 bits

}

// BYTE2

for (int i=0; i<8; i++)

{

if( ((( BYTE2>>(7-i) ) &0x01) ^ ((crc_result & 0x10)>>4)) > 0 ) // IF(XOR(C6;BITAND(D5;2^4)/2^4)

{ crc_result = (byte) (crc5_poly ^ ((crc_result<<1) & 0x1f)); } // BITXOR($D$1;BITAND((D5*2);31))

else

{ crc_result = (byte)((crc_result<<1) & 0x1f); } // shift left, keep only lower 6 bits

}

// 3 extra bits set to zero
byte BYTE3=0x00;
for (int i=0; i<3; i++)
{
if( ((( BYTE3>>(7-i) ) &0x01) ^ ((crc_result & 0x10)>>4)) > 0 ) // IF(XOR(C6;BITAND(D5;2^4)/2^4)
{ crc_result = (byte) (crc5_poly ^ ((crc_result<<1) & 0x1f)); } // BITXOR($D$1;BITAND((D5*2);31))
else
{ crc_result = (byte)((crc_result<<1) & 0x1f); } // shift left, keep only lower 6 bits
}
return crc_result;

}

結(jié)論

本應(yīng)用筆記介紹了如何在與MAX14915八通道工業(yè)高邊開關(guān)通信的微控制器上對(duì)CRC算法進(jìn)行編碼。該代碼使用MAX14915EVKIT和相應(yīng)的GUI進(jìn)行測試。通過利用本應(yīng)用筆記中的C代碼示例,工程師獲得了一個(gè)經(jīng)過驗(yàn)證的解決方案來實(shí)現(xiàn)這種額外的數(shù)據(jù)通信保護(hù)。在某些情況下,應(yīng)在目標(biāo)微控制器上執(zhí)行一些基準(zhǔn)測試,尤其是在優(yōu)先考慮快速執(zhí)行速度的情況下。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 微控制器
    +關(guān)注

    關(guān)注

    48

    文章

    7394

    瀏覽量

    150629
  • 控制器
    +關(guān)注

    關(guān)注

    112

    文章

    16028

    瀏覽量

    176648
  • SPI
    SPI
    +關(guān)注

    關(guān)注

    17

    文章

    1681

    瀏覽量

    91052
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    八通道高壓發(fā)送器接收器開關(guān)MAX4937電子資料

    概述:MAX4937采用節(jié)省空間的5mm x 11mm、56引腳TQFN封裝,為八通道、高壓發(fā)送器/接收器(T/R)開關(guān)。T/R開關(guān)基于二極管橋拓?fù)洌O管橋的總電流可通過SPI?接口
    發(fā)表于 04-14 06:16

    八通道超聲前端與CW多普勒混頻器MAX2078電子資料

    概述:MAX2078是MAXIM公司生產(chǎn)的一款八通道超聲前端是一個(gè)完全集成的雙極性,高密度的八通道超聲接收器的低成本,信道計(jì)數(shù),高性能便攜式和推車式超聲系統(tǒng)進(jìn)行了優(yōu)化。易于使用的集成
    發(fā)表于 04-21 06:16

    求一種八通道傳輸/接收(T/R)開關(guān)的設(shè)計(jì)方案

    求一種八通道傳輸/接收(T/R)開關(guān)的設(shè)計(jì)方案
    發(fā)表于 05-24 06:32

    MAX2077中文資料,八通道超聲接收器

    MAX2077八通道超聲成像前端是完全集成的雙極型、高密度、八通道超聲接收器,優(yōu)化用于低成本、多通道、高性能便攜及車載超聲系統(tǒng)。這款易于使用的IC允許用戶以較小的空間
    發(fā)表于 01-10 13:20 ?70次下載

    程序式八通道級(jí)聯(lián)定時(shí)器

    程序式八通道級(jí)聯(lián)定時(shí)器
    的頭像 發(fā)表于 08-10 23:04 ?2682次閱讀
    程序式<b class='flag-5'>八通道</b>級(jí)聯(lián)定時(shí)器

    MAX2078 八通道超聲前端,提供CW多普勒混頻器

    MAX2078 八通道超聲前端,提供CW多普勒混頻器 概述 MAX2078八通道超聲前端是完全集成的雙極型、高密度、八通道超聲接收器,
    發(fā)表于 01-10 13:18 ?1256次閱讀
    <b class='flag-5'>MAX</b>2078 <b class='flag-5'>八通道</b>超聲前端,提供CW多普勒混頻器

    MAX2077 八通道超聲成像前端是完全集成的雙極型、高密度

    MAX2077 八通道超聲成像前端是完全集成的雙極型、高密度、八通道超聲接收器 概述
    發(fā)表于 01-10 13:28 ?1064次閱讀
    <b class='flag-5'>MAX</b>2077 <b class='flag-5'>八通道</b>超聲成像前端是完全集成的雙極型、高密度

    CS222八通道觸摸傳感開關(guān)

    CS222八通道觸摸
    發(fā)表于 01-08 21:27 ?34次下載

    基于FPGA的八通道超聲探傷系統(tǒng)設(shè)計(jì)

    文中提出了一種基于FPGA的八通道超聲探傷系統(tǒng)設(shè)計(jì)方案。該系統(tǒng)利用低功耗可變?cè)鲆孢\(yùn)放和八通道ADC構(gòu)成集成度的前端放大和數(shù)據(jù)采集模塊;采用FPGA和ARM作為數(shù)字信號(hào)處理的核心和
    發(fā)表于 06-09 16:30 ?54次下載
    基于FPGA的<b class='flag-5'>八通道</b>超聲探傷系統(tǒng)設(shè)計(jì)

    Maxim推出MAX14913八通道開關(guān)和驅(qū)動(dòng)器,可對(duì)任意感性負(fù)載安全地驅(qū)動(dòng)與消磁

    Maxim針對(duì)工業(yè)4.0應(yīng)用推出MAX14913八通道開關(guān)和驅(qū)動(dòng)器,幫助
    發(fā)表于 07-11 10:04 ?2557次閱讀

    Maxim八通道開關(guān)/驅(qū)動(dòng)器可大幅提升工業(yè)4.0應(yīng)用體驗(yàn)

    Maxim八通道開關(guān)/驅(qū)動(dòng)器可對(duì)任意感性負(fù)載安全消磁,大幅提升工業(yè)4.0應(yīng)用體驗(yàn) 。 Maxim針對(duì)
    發(fā)表于 07-11 10:18 ?881次閱讀

    AD5758+ADP1031八通道模擬輸出模塊-演示平臺(tái)用戶指南

    AD5758+ADP1031八通道模擬輸出模塊-演示平臺(tái)用戶指南
    發(fā)表于 03-23 09:23 ?0次下載
    AD5758+ADP1031<b class='flag-5'>八通道</b>模擬輸出模塊-演示平臺(tái)用戶<b class='flag-5'>指南</b>

    如何對(duì)MAX14915/16進(jìn)行編程 - 8通道開關(guān)

    MAX14915為8通道開關(guān)。它支持8通道驅(qū)動(dòng)1A。微控制器兼容型串行外設(shè)接口(SPI)提供
    的頭像 發(fā)表于 02-21 09:44 ?1704次閱讀
    如何對(duì)<b class='flag-5'>MAX14915</b>/16進(jìn)行<b class='flag-5'>編程</b> - 8<b class='flag-5'>通道</b><b class='flag-5'>高</b><b class='flag-5'>邊</b><b class='flag-5'>開關(guān)</b>

    如何對(duì)MAX14915/16進(jìn)行編程 - 8通道開關(guān)

    MAX14915為8通道開關(guān)。它支持8通道驅(qū)動(dòng)1A。微控制器兼容型串行外設(shè)接口(SPI)提供
    的頭像 發(fā)表于 06-13 16:29 ?875次閱讀
    如何對(duì)<b class='flag-5'>MAX14915</b>/16進(jìn)行<b class='flag-5'>編程</b> - 8<b class='flag-5'>通道</b><b class='flag-5'>高</b><b class='flag-5'>邊</b><b class='flag-5'>開關(guān)</b>

    使用DAC53608的八通道編程比較器

    電子發(fā)燒友網(wǎng)站提供《使用DAC53608的八通道編程比較器.pdf》資料免費(fèi)下載
    發(fā)表于 10-08 11:26 ?0次下載
    使用DAC53608的<b class='flag-5'>八通道</b>可<b class='flag-5'>編程</b>比較器