NBP8s integration with Vector system

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

NBP8s integration with Vector system

158 次查看
goodguy94
Contributor I

Hello evreyone ,

I am trying to integrate NBP8s pressure sensor with vector system. VT2710 sensor module has SPI interface.

Has anyone tried this integration before ? Would love to know your suggestions. I am not able to get proper and valid response from the sensor. 

CAPL script i wrote :

/*@!Encoding:1252*/

variables
{
/* IO buffers, timers */
byte txBuffer[2];
msTimer tMain, tSpi, tDelay;

/* Main state machine */
int mainState = 0;
word curFrame;
int intAsserted, b_INTF;
int s4, s3, s2, s1, s0;

/* Micro-FSM for SPI transaction */
enum Spiop {OP_NONE = 0, OP_RD=1, OP_WR=2};
enum Spisub {IDLE=0, TX1=10, RX1=11, TX2=12, RX2=13};
int tr_op , spiSub;

word tr_addr = 0;
byte tr_wdata = 0;
byte tr_rdata = 0;
int tr_retry = 0; // bounded retry count (faults)
int needDummy = 1; // after WAKE/CS glitch or any detected fault

/* SPI response */
byte misoHi = 0, misoLo = 0;
word spiResp = 0;

/* Cached registers (live mirror) */
byte regSPIOPS = 0;
byte spiops_base = 0;
int spiops_base_valid = 0;

/* INT edge auto-detect */
int lastIntLevel = -1;
int Idle;
int active_IntPol = 0; // bit 5 of INTTRIG
int intLevel = 0;
int USE_READY_GATE = 1; // 0 - off (default) , 1 - on (real HW)

/* device asserts READY when it s safe to transact. */
int startupWaitDone = 0;

/* Optional: last decoded flags */
byte status, data;
word msb, lsb, msb_addr, lsb_addr;

/* Register Addresses */
word ADDR_SPIOPS = 0x0038; // [2]=CORE_TR_HOLD, [1:0]=FLASH_RANGE ; [7:3] reserved

/* Firmware/HW derivative/version windows (via SPIOPS) */
word ADDR_FW_DERIV = 0x0805; // valid when SPIOPS FLASH_RANGE == 00 (0x04)
word ADDR_FW_VER = 0x0804;
word ADDR_HW_DERIV = 0x1542; // valid when SPIOPS FLASH_RANGE == 11 (0x07)
word ADDR_HW_VER = 0x1543;
}

/* SPI frame builder
p1 covers bits b15..b9, p0 covers b8..b2, both even parity. */
/* Build a 16-bit SPI frame per NBP8S protocol:
- bit15: R/W (1=write, 0=read)
- bits14..2: address / data field
- bits1..0: parity bits (even parity on bits15..9 and bits8..2) */

word makeNbp8sFrame(int rw, word addr_or_data)
{
word f = 0;
int group1, group2, p1, p0;

if (spiSub == TX1) {
/* TX1: Address frame 13-bit address */
f = ((rw & 1) << 15) | ((addr_or_data & 0x1FFF) << 2);

} else {
/* TX2: Data frame or dummy 8-bit data in bits9..2 */
f = ((rw & 1) << 15) | ((addr_or_data & 0xFF) << 2);
}

write("[makeFrame] RAW Frame (no parity) = 0x%04X", f);

/* --- Inline parity logic (same as computeParity, no countBits) --- */
group1 = (f >> 9) & 0x7F; // bits 15..9
group2 = (f >> 2) & 0x7F; // bits 8..2

// count ones manually
p1 = 0; p0 = 0;
while (group1) { if (group1 & 1) p1++; group1 >>= 1; }
while (group2) { if (group2 & 1) p0++; group2 >>= 1; }

p1 = (p1 & 1) ; // even parity for group1
p0 = (p0 & 1) ; // even parity for group2

f &= 0xFFFC; // clear bits1..0
f |= ((p1 << 1) | p0); // set parity bits

write("[makeFrame] Final frame = 0x%04X", f);
return f;
}

/* Status & fault logging */
void logSpiStatus(word r)
{
s4 = (r >> 14) & 1;
s3 = (r >> 13) & 1;
s2 = (r >> 12) & 1;
s1 = (r >> 11) & 1;
s0 = (r >> 10) & 1;

status = (r >> 10) & 0x1F;
data = (r >> 2) & 0xFF;

write("[SPI Status Bits] s4=%d s3=%d s2=%d s1=%d s0=%d | Full Response=0x%04X", s4, s3, s2, s1, s0, r);
write("[SPI Decoded] Status=0x%02X Data=0x%02X", status, data);

if (s4) write("Fault: Reserved fault (undefined)");
if (s3) write("Fault: Ignored command or invalid previous read");
if (s2) write("Fault: Clock error");
if (s1) write("Fault: Parity error");
if (s0) write("Fault: Bus contention or illegal access");
}


/* (s4..s0 any non-zero indicates an issue). */
int hasFault(word r)
{
return (((r >> 14) & 1) || ((r >> 13) & 1) || ((r >> 12) & 1) || ((r >> 11) & 1) || ((r >> 10) & 1));
}

/* Queue a 16-bit frame on MOSI (CS low is driven here) */


void sendFrame(word frame16)
{
txBuffer[0] = (byte)(frame16 >> 8);
txBuffer[1] = (byte)(frame16 & 0xFF);
sensorQueueMosiData("SENSOR::SPI::Master_Port::NBP_Sensor", txBuffer, 16);
}

/* High-level: schedule a READ/WRITE op */

void spiReadByte(word addr)
{
tr_addr = addr;
tr_op = OP_RD;
tr_retry= 0;
spiSub = TX1;
setTimer(tSpi, 1);
}

void spiWriteByte(word addr, byte data)
{
tr_addr = addr;
tr_wdata = data;
tr_op = OP_WR;
tr_retry= 0;
spiSub = TX1;
setTimer(tSpi, 1);
}


/* SPI Micro-FSM */
on timer tSpi
{
switch (spiSub)
{

/* TX1 */
case TX1:

@VTS::VT2710_1_DIO_Ch2::DigitalOutput6 = 0 ; // CS low

if (USE_READY_GATE && (tr_addr != ADDR_SPIOPS))
{
intAsserted = (active_IntPol ? (intLevel == 1) : (intLevel == 0));
if( b_INTF && !intAsserted)
{
write("[SPI] Waiting for READY before first TX1 - Sensor initiated");
setTimer(tSpi, 1);
break;
}
}


curFrame = needDummy ? makeNbp8sFrame(0, 0x0000): makeNbp8sFrame((tr_op == OP_WR) ? 1 : 0, tr_addr);

write("[TX1] Master --> Sensor: Frame = 0x%04X (R/W=%d Addr=0x%04X)",curFrame, (curFrame >> 15) & 1, (curFrame >> 2) & 0x1FFF);
sendFrame(curFrame);
spiSub = RX1;
setTimer(tSpi, 1);
break;

/* RX1 (R0 after TX1) */
case RX1:
misoHi = @sensor::SPI::Master_Port::NBP_Sensor::Frame1.MISO_Signals.MISO_High_byte;
misoLo = @sensor::SPI::Master_Port::NBP_Sensor::Frame1.MISO_Signals.MISO_Low_byte;
spiResp = ((word)misoHi << | misoLo;
write("[RX1] Sensor --> Master: Response = 0x%04X (Status=0x%02X Data=0x%02X)",spiResp, (spiResp >> 10) & 0x1F, (spiResp >> 2) & 0xFF);
if (needDummy) {
needDummy = 0;
spiSub = TX1;
setTimer(tSpi, 1);
break;
}

// correct fault handling
logSpiStatus(spiResp);
if(tr_addr != ADDR_SPIOPS)
{
s4 = (spiResp >> 14) & 1;
s3 = (spiResp >> 13) & 1;
s2 = (spiResp >> 12) & 1;
s1 = (spiResp >> 11) & 1;
s0 = (spiResp >> 10) & 1;

if (s2) { // Clock fault
if (tr_retry < 4) {
write("[SPI] Clock fault: dummy+retry");
needDummy = 1; tr_retry++;
spiSub = TX1; setTimer(tSpi, 5);
break;
}

tr_op = OP_NONE;
spiSub = IDLE;
break;
}

if (s3 || s4) {
write("[SPI] Fatal fault (Reserved/Previous read/write) error, aborting transfer");

tr_op = OP_NONE;
spiSub = IDLE;
break;
}

if (s1 || s0) {
if (tr_retry < 4) {
write("[SPI] SPI fault (s1/s0) : dummy+retry");
needDummy = 1;
tr_retry++;
spiSub = TX1;
setTimer(tSpi, 1);
break;
}

tr_op = OP_NONE;
spiSub = IDLE;
break;
}
}

if (tr_op == OP_WR) {
curFrame = makeNbp8sFrame(1, tr_wdata);
write("[TX2] Master --> Sensor: Data Frame = 0x%04X", curFrame);
sendFrame(curFrame);
spiSub = RX2;
setTimer(tSpi, 5);
break;
}

/* For READs send dummy frame */
else if (tr_op == OP_RD) {
curFrame = makeNbp8sFrame(0, 0x0000);
write("[TX2] Master --> Sensor: Dummy Frame = 0x%04X", curFrame);
sendFrame(curFrame);
spiSub = RX2;
setTimer(tSpi, 1);
break;
}

/* TX2 */
case TX2:
spiSub = RX2;
setTimer(tSpi, 1);
break;

/* RX2 (R1: DATA for READ, STATUS for WRITE) */
case RX2:

misoHi = @sensor::SPI::Master_Port::NBP_Sensor::Frame1.MISO_Signals.MISO_High_byte;
misoLo = @sensor::SPI::Master_Port::NBP_Sensor::Frame1.MISO_Signals.MISO_Low_byte;
spiResp = ((word)misoHi << | misoLo;
@VTS::VT2710_1_DIO_Ch2::DigitalOutput6 = 1 ; // CS high
setTimer(tDelay, 10);
write("[RX2] Sensor --> Master: Response = 0x%04X (Status=0x%02X Data=0x%02X)",spiResp, (spiResp >> 10) & 0x1F, (spiResp >> 2) & 0xFF);

logSpiStatus(spiResp); // correct fault handling */
if(tr_addr != ADDR_SPIOPS)
{
s4 = (spiResp >> 14) & 1;
s3 = (spiResp >> 13) & 1;
s2 = (spiResp >> 12) & 1;
s1 = (spiResp >> 11) & 1;
s0 = (spiResp >> 10) & 1;

if (s2) { // Clock fault
if (tr_retry < 4) {
write("[SPI] Clock fault: dummy+retry");
needDummy = 1;
tr_retry++;
spiSub = TX1;
setTimer(tSpi, 1);
break;
}
tr_op = OP_NONE;
spiSub = IDLE;
break;
}

if (s3 || s4) {
write("[SPI] Fatal fault (parity/contend), aborting transfer");
tr_op = OP_NONE;
spiSub = IDLE;
break;
}

if (s1 || s0) {
if (tr_retry < 4) {
write("[SPI] SPI fault (s1/s0) : dummy+retry");
needDummy = 1;
tr_retry++;
spiSub = TX1;
setTimer(tSpi, 1);
break;
}
tr_op = OP_NONE;
spiSub = IDLE;
break;
}
}
if (tr_op == OP_RD)
tr_rdata = (spiResp >> 2) & 0xFF;

tr_op = OP_NONE;
spiSub = IDLE;
setTimer(tDelay, 1);
break;
}
}

/* Utility */
int spiBusy() { return (tr_op != OP_NONE) || (spiSub != IDLE); }

/* Start */
on start
{
write("NBP8s Evaluation");
setTimer(tDelay,38);

needDummy = 1; /* first transfer dummy after WAKE/CS glitch */
mainState = 0;
tr_op = OP_NONE;
spiSub = IDLE;
startupWaitDone = 1;
setTimer(tMain, 35);
}

/* tDelay yields back to main */
on timer tDelay
{
setTimer(tMain, 5);
}

/* Main FSM */
on timer tMain
{
setTimer(tMain, 1);

/* State machine */
switch (mainState)
{
/* SPIOPS handshake */
case 0:
if (spiBusy()) break;
// If a dummy is pending (e.g. after reset/fault), consume it
write("SPIOPS - Dummy frame to clear start up");

// @VTS::VT2710_1_DIO_Ch2::DigitalOutput6 = 0; // CS low
// setTimer(tDelay, 2);
// @VTS::VT2710_1_DIO_Ch2::DigitalOutput6 = 1; // CS high
// setTimer(tDelay, 5);

spiReadByte(0x0000); // dummy frame (ignored by device)
setTimer(tDelay,5);

needDummy = 0;
setTimer(tDelay,5);
mainState = 1;
break;

case 1:
if (spiBusy()) break;
write("SPIOPS - SENSOR Ready , proceeding to write");
spiWriteByte(ADDR_SPIOPS, 0x04); // write SPIOPS = 0x04
setTimer(tDelay,5);
mainState = 2;
break;

case 2:
if (spiBusy()) break;
spiReadByte(ADDR_SPIOPS); // read back SPIOPS
setTimer(tDelay, 5);
mainState = 3;
break;

case 3:
if (spiBusy()) break;
mainState = 4;
break;

case 4:
if (spiBusy()) break;

// Use tr_rdata (captured byte) instead of spiResp bits
regSPIOPS = (byte)(tr_rdata & 0x07);

// If HOLD active and range 00 -> SPIOPS must be 0x04
if (regSPIOPS == 0x04) {
write("SPIOPS: SET OK (0x%02X)", regSPIOPS);
mainState = 10; // go to FW/HW read
}
else {
write("SPIOPS NOT READY (SPIOPS = 0x%02X) --> retrying", regSPIOPS);
needDummy = 1;
setTimer(tDelay,5);
mainState = 1 ;
}
break;

/* FW / HW READ SEQUENCE */
case 10:
if (spiBusy()) break;
write("SPIOPS already set to 0x04 --> Firmware window active");
write("Reading FW_DERIV (0x0805)...");
spiReadByte(ADDR_FW_DERIV);
setTimer(tDelay, 5);
mainState = 11;
break;

case 11:
if (spiBusy()) break;
write("FW_DERIV = 0x%02X", tr_rdata);
write("Reading FW_VER (0x0804)...");
spiReadByte(ADDR_FW_VER);
setTimer(tDelay, 5);
mainState = 12;
break;

case 12:
if (spiBusy()) break;
write("FW_VER = 0x%02X", tr_rdata);
setTimer(tDelay, 5);
mainState = 13;
break;

case 13:
if (spiBusy()) break;
write("Clearing SPIOPS (0x0038) to release NBP8s CPU");
spiWriteByte(ADDR_SPIOPS, 0x00);
setTimer(tDelay, 5);
mainState = 14;
break;

case 14:
if (spiBusy()) break;
write("FW read complete");
mainState = 99;
break;

case 99:
// Idle / stop
break;
}}

any suggestions and feedback would be helpful for further progress.

Best regards

标签 (1)
标记 (1)
0 项奖励
回复
2 回复数

139 次查看
TomasVaverka
NXP TechSupport
NXP TechSupport

Hello Rajvishnu,

The NBP8 sensor uses SPI Mode 0 (CPOL=0, CPHA=0) with 16-bit frames and even parity on two groups of bits. Ensure your Vector VT2710 SPI settings match this. After WAKEUP or any CS_B glitch, the first SPI command is ignored due to a clock fault -> send a dummy frame first to clear the error. Always wait for the READY pin to assert before starting SPI transfers. This indicates the sensor is ready and its CPU is halted. Check that CS_B stays low for all 16 clock cycles per frame and that parity bits are correct. Handle fault bits (s4..s0) properly. If any are set, retry with a dummy frame. s3 (ignored command) also requires a retry. Clear the SPIOPS register at the end of the session to resume normal sensor operation. These steps usually resolve invalid responses during integration.

BRs, Tomas

0 项奖励
回复

136 次查看
goodguy94
Contributor I
Hi Tomas
Thanks a lot for the quick response. The configuration is exactly the same as defined in datasheet and i am following the same steps as you have outlined.

I try to set SPIOPS and the response from the sensor is 0x0220 and it stays the same for subsequent responses.
i am not sure if i am missing something.
Any thoughts on this ?

Best regards,'
Rajvishnu
0 项奖励
回复
%3CLINGO-SUB%20id%3D%22lingo-sub-2246790%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3ENBP8s%20%E4%B8%8E%20Vector%20%E7%B3%BB%E7%BB%9F%E9%9B%86%E6%88%90%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2246790%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E5%A4%A7%E5%AE%B6%E5%A5%BD%EF%BC%8C%3CBR%20%2F%3E%3CBR%20%2F%3E%E6%88%91%E6%AD%A3%E5%9C%A8%E5%B0%9D%E8%AF%95%E5%B0%86%20NBP8s%20%E5%8E%8B%E5%8A%9B%E4%BC%A0%E6%84%9F%E5%99%A8%E4%B8%8E%E7%9F%A2%E9%87%8F%E7%B3%BB%E7%BB%9F%E9%9B%86%E6%88%90%E3%80%82VT2710%20%E4%BC%A0%E6%84%9F%E5%99%A8%E6%A8%A1%E5%9D%97%E5%85%B7%E6%9C%89%20SPI%20%E6%8E%A5%E5%8F%A3%E3%80%82%3CBR%20%2F%3E%3CBR%20%2F%3E%E6%9C%89%E4%BA%BA%E5%B0%9D%E8%AF%95%E8%BF%87%E8%BF%99%E7%A7%8D%E9%9B%86%E6%88%90%E5%90%97%EF%BC%9F%E5%B8%8C%E6%9C%9B%E4%BA%86%E8%A7%A3%E6%82%A8%E7%9A%84%E5%BB%BA%E8%AE%AE%E3%80%82%E6%88%91%E6%97%A0%E6%B3%95%E4%BB%8E%E4%BC%A0%E6%84%9F%E5%99%A8%E8%8E%B7%E5%BE%97%E6%AD%A3%E7%A1%AE%E6%9C%89%E6%95%88%E7%9A%84%E5%93%8D%E5%BA%94%E3%80%82%20%3CBR%20%2F%3E%3CBR%20%2F%3E%E6%88%91%E7%BC%96%E5%86%99%E7%9A%84%20CAPL%20%E8%84%9A%E6%9C%AC%3C%2FP%3E%3CP%3E%2F*%40!Encoding%3A1252*%2F%3C%2FP%3E%3CP%3E%E5%8F%98%E9%87%8F%20%3CBR%20%2F%3E%20%7B%3CBR%20%2F%3E%2F*%20IO%20%E7%BC%93%E5%86%B2%E5%8C%BA%E3%80%81%E8%AE%A1%E6%97%B6%E5%99%A8%20*%2F%20%3CBR%20%2F%3E%20%E5%AD%97%E8%8A%82%20txBuffer%20%5B2%5D%3B%20%3CBR%20%2F%3E%20mStimer%20tMain%E3%80%81tsPi%E3%80%81tDelay%3B%3C%2FP%3E%3CP%3E%2F*%20%E4%B8%BB%E7%8A%B6%E6%80%81%E6%9C%BA%20*%2F%3CBR%20%2F%3Eint%20mainState%20%3D%200%3B%3CBR%20%2F%3Eword%20curFrame%3B%3CBR%20%2F%3EintAsserted%2C%20b_INTF%3B%3CBR%20%2F%3Eint%20s4%2C%20s3%2C%20s2%2C%20s1%2C%20s0%EF%BC%9B%3C%2FP%3E%3CP%3E%2F*%20SPI%20%E4%BA%8B%E5%8A%A1%E7%9A%84%20Micro-FSM%20*%2F%3CBR%20%2F%3Eenum%20Spiop%20%7BOP_NONE%20%3D%200%2C%20OP_RD%3D1%2C%20OP_WR%3D2%7D%3B%3CBR%20%2F%3Eenum%20Spisub%20%7BIDLE%3D0%2C%20TX1%3D10%2C%20RX1%3D11%2C%20TX2%3D12%2C%20RX2%3D13%7D%3B%3CBR%20%2F%3Eint%20tr_op%20%2C%20spiSub%EF%BC%9B%3C%2FP%3E%3CP%3Eword%20tr_addr%20%3D%200%EF%BC%9B%3CBR%20%2F%3E%E5%AD%97%E8%8A%82%20tr_wdata%20%3D%200%EF%BC%9B%E5%AD%97%E8%8A%82%20tr_rdata%20%3D%200%EF%BC%9B%3CBR%20%2F%3Eint%20tr_retry%20%3D%200%EF%BC%9B%2F%2F%E9%99%90%E5%AE%9A%E9%87%8D%E8%AF%95%E6%AC%A1%E6%95%B0%EF%BC%88%E6%95%85%E9%9A%9C%EF%BC%89%3CBR%20%2F%3Eint%20needDummy%20%3D%201%EF%BC%9B%2F%2F%E5%9C%A8%20WAKE%2FCS%20%E6%95%85%E9%9A%9C%E6%88%96%E4%BB%BB%E4%BD%95%E6%A3%80%E6%B5%8B%E5%88%B0%E7%9A%84%E6%95%85%E9%9A%9C%E4%B9%8B%E5%90%8E%20%3CBR%20%2F%3E%3C%2FP%3E%3CP%3E%2F*%20SPI%20%E5%93%8D%E5%BA%94%20*%2F%20%3CBR%20%2F%3E%20%E5%AD%97%E8%8A%82%20misoHI%20%3D%200%EF%BC%8CmiSolo%20%3D%200%EF%BC%9Bword%20SpireSP%20%3D%200%EF%BC%9B%3CBR%20%2F%3E%3C%2FP%3E%3CP%3E%2F*%20%E7%BC%93%E5%AD%98%E5%AF%84%E5%AD%98%E5%99%A8%EF%BC%88%E5%AE%9E%E6%97%B6%E9%95%9C%E5%83%8F%EF%BC%89*%2F%20%3CBR%20%2F%3E%20%E5%AD%97%E8%8A%82%20regsPiops%20%3D%200%EF%BC%9B%E5%AD%97%E8%8A%82%20spiops_bas%20%3CBR%20%2F%3E%20e%20%3D%200%EF%BC%9Bint%20spiops_base_valid%20%3D%200%EF%BC%9B%3CBR%20%2F%3E%3C%2FP%3E%3CP%3E%2F*%20INT%20%E8%BE%B9%E6%B2%BF%E8%87%AA%E5%8A%A8%E6%A3%80%E6%B5%8B%20*%2F%3CBR%20%2F%3Eint%20lastIntLevel%20%3D%20-1%3B%3CBR%20%2F%3Eint%20Idle%3B%3CBR%20%2F%3Eint%20active_IntPol%20%3D%200%3B%20%2F%2F%20INTTRIG%20%E7%9A%84%E7%AC%AC%205%20%E4%BD%8D%3CBR%20%2F%3EintLevel%20%3D%200%3B%3CBR%20%2F%3Eint%20USE_READY_GATE%20%3D%201%3B%20%2F%2F%200%20-%20off%EF%BC%88%E9%BB%98%E8%AE%A4%EF%BC%89%EF%BC%8C1%20-%20on%EF%BC%88%E5%AE%9E%E9%99%85%20HW%EF%BC%89%E3%80%82%3C%2FP%3E%3CP%3E%2F*%20%E5%BD%93%E5%8F%AF%E4%BB%A5%E5%AE%89%E5%85%A8%E4%BA%A4%E6%98%93%E6%97%B6%EF%BC%8C%E8%AE%BE%E5%A4%87%E6%96%AD%E8%A8%80%20READY%E3%80%82*%2F%3CBR%20%2F%3Eint%20startupWaitDone%20%3D%200%EF%BC%9B%3C%2FP%3E%3CP%3E%2F*%20%E5%8F%AF%E9%80%89%E7%9A%84%EF%BC%9A%E4%B8%8A%E6%AC%A1%E8%A7%A3%E7%A0%81%E7%9A%84%E6%A0%87%E5%BF%97%20*%2F%3CBR%20%2F%3E%E5%AD%97%E8%8A%82%E7%8A%B6%E6%80%81%E3%80%81%E6%95%B0%E6%8D%AE%EF%BC%9B%3CBR%20%2F%3E%E5%8D%95%E8%AF%8D%20msb%E3%80%81lsb%E3%80%81msb_addr%E3%80%81lsb_addr%EF%BC%9B%3C%2FP%3E%3CP%3E%2F*%20%E5%AF%84%E5%AD%98%E5%99%A8%E5%9C%B0%E5%9D%80%20*%2F%3CBR%20%2F%3Eword%20ADDR_SPIOPS%20%3D%200x0038%3B%20%2F%2F%20%5B2%5D%3DCORE_TR_HOLD%2C%20%5B1%3A0%5D%3DFLASH_RANGE%3B%20%5B7%3A3%5D%20%E4%BF%9D%E7%95%99%3C%2FP%3E%3CP%3E%2F*%20%E5%9B%BA%E4%BB%B6%2FHW%20%E8%A1%8D%E7%94%9F%2F%E7%89%88%E6%9C%AC%E7%AA%97%E5%8F%A3%EF%BC%88%E9%80%9A%E8%BF%87%20SPIOPS%EF%BC%89%20*%2F%3CBR%20%2F%3Eword%20ADDR_FW_DERIV%20%3D%200x0805%3B%20%2F%2F%20SPIOPS%20FLASH_RANGE%20%3D%3D%2000%20(0x04)%20%E6%97%B6%E6%9C%89%E6%95%88%3CBR%20%2F%3Eword%20ADDR_FW_VER%20%3D%200x0804%3B%3CBR%20%2F%3Eword%20ADDR_HW_DERIV%20%3D%200x1542%3B%20%2F%2F%20SPIOPS%20FLASH_RANGE%20%3D%3D%2011%20(0x07)%20%E6%97%B6%E6%9C%89%E6%95%88%3CBR%20%2F%3Eword%20ADDR_HW_VER%20%3D%200x1543%3B%3CBR%20%2F%3E%7D%3C%2FP%3E%3CP%3E%2F*%20SPI%20%E5%B8%A7%E7%94%9F%E6%88%90%E5%99%A8%3CBR%20%2F%3Ep1%20%E5%8C%85%E6%8B%AC%20b15..b9%20%E4%BD%8D%EF%BC%8Cp0%20%E5%8C%85%E6%8B%AC%20b8..b2%20%E4%BD%8D%EF%BC%8C%E5%9D%87%E4%B8%BA%E5%81%B6%E5%A5%87%E5%81%B6%E6%A0%A1%E9%AA%8C%E3%80%82*%2F%20%3CBR%20%2F%3E%20%2F*%20%E6%A0%B9%E6%8D%AE%20NBP8S%20%E5%8D%8F%E8%AE%AE%E7%89%88%E6%9C%AC%2016%20%E4%BD%8D%20SPI%20%E5%B8%A7%EF%BC%9A-bit15%EF%BC%9AR%2FW%EF%BC%881%3D%E5%86%99%E5%85%A5%EF%BC%8C0%3D%E8%AF%BB%E5%8F%96%EF%BC%89%3CBR%20%2F%3E-bits14..%202%EF%BC%9A%E5%9C%B0%E5%9D%80%2F%E6%95%B0%E6%8D%AE%E5%AD%97%E6%AE%B5%20%3CBR%20%2F%3E%20%3CBR%20%2F%3E-bits1..%200%EF%BC%9A%E5%A5%87%E5%81%B6%E6%A0%A1%E9%AA%8C%E4%BD%8D%EF%BC%88bits15..%209%20%E5%92%8C%20bits8...%202%20%E4%B8%8A%E7%9A%84%E5%81%B6%E6%95%B0%E5%A5%87%E5%81%B6%E6%A0%A1%E9%AA%8C%EF%BC%89*%2F%3C%2FP%3E%3CP%3Eword%20makeNbp8sFrame(int%20rw%2C%20word%20addr_or_data)%3CBR%20%2F%3E%7B%3CBR%20%2F%3Eword%20f%20%3D%200%3B%3CBR%20%2F%3Eint%20group1%2C%20group2%2C%20p1%2C%20p0%EF%BC%9B%3C%2FP%3E%3CP%3E%E5%A6%82%E6%9E%9C%20(spiSub%20%3D%3D%20TX1)%20%7B%3CBR%20%2F%3E%2F*%20TX1%EF%BC%9A%E5%9C%B0%E5%9D%80%E5%B8%A7%2013%20%E4%BD%8D%E5%9C%B0%E5%9D%80%20*%2F%3CBR%20%2F%3Ef%20%3D%20((rw%26amp%3B%201)%26lt%3B%26lt%3B%2015)%7C%20((addr_or_data%26amp%3B%200x1FFF)%26lt%3B%26lt%3B%202)%EF%BC%9B%3C%2FP%3E%3CP%3E%7D%20else%20%7B%3CBR%20%2F%3E%2F*%20TX2%EF%BC%9Abit9...2%20%E4%B8%AD%E7%9A%84%E6%95%B0%E6%8D%AE%E5%B8%A7%E6%88%96%E8%99%9A%E6%8B%9F%208%20%E4%BD%8D%E6%95%B0%E6%8D%AE%20*%2F%3CBR%20%2F%3Ef%20%3D%20((rw%26amp%3B%201)%26lt%3B%26lt%3B%2015)%7C%20((addr_or_data%26amp%3B%200xFF)%26lt%3B%26lt%3B%202)%3B%3CBR%20%2F%3E%7D%3C%2FP%3E%3CP%3Ewrite(%22%5BmakeFrame%5D%20RAW%20Frame%20(no%20parity)%20%3D%200x%2504X%22%2C%20f)%EF%BC%9B%3C%2FP%3E%3CP%3E*%2F%3CBR%20%2F%3Egroup1%20%3D%20(f%26gt%3B%26gt%3B%209)%26amp%3B%200x7F%3B%20%2F%2F%20bits%2015...9%3CBR%20%2F%3Egroup2%20%3D%20(f%26gt%3B%26gt%3B%202)%26amp%3B%200x7F%3B%20%2F%2F%20bits%208...2%3C%2FP%3E%3CP%3E%2F%2F%20%E6%89%8B%E5%8A%A8%E8%AE%A1%E6%95%B0%3CBR%20%2F%3Ep1%20%3D%200%3B%20p0%20%3D%200%3B%3CBR%20%2F%3Ewhile%20(group1)%20%7B%20if%20(group1%26amp%3B%201)%20p1%2B%2B%3B%20group1%26gt%3B%26gt%3B%20%3D%201%3B%20%7D%3CBR%20%2F%3Ewhile%20(group2)%20%7B%20if%20(group2%26amp%3B%201)%20p0%2B%2B%3B%20group2%26gt%3B%26gt%3B%20%3D%201%3B%20%7D%3C%2FP%3E%3CP%3Ep1%20%3D%20(p1%26amp%3B%201)%20%3B%20%2F%2F%20%E7%AC%AC%201%20%E7%BB%84%E7%9A%84%E5%81%B6%E6%95%B0%E5%A5%87%E5%81%B6%E6%A0%A1%E9%AA%8C%3CBR%20%2F%3Ep0%20%3D%20(p0%26amp%3B%201)%20%3B%20%2F%2F%20%E7%AC%AC%202%20%E7%BB%84%E7%9A%84%E5%81%B6%E6%95%B0%E5%A5%87%E5%81%B6%E6%A0%A1%E9%AA%8C%3C%2FP%3E%3CP%3Ef%26amp%3B%3D%200xFFFC%3B%20%2F%2F%20%E6%B8%85%E9%99%A4%E4%BD%8D%201..0%3CBR%20%2F%3Ef%20%7C%3D%20((p1%26lt%3B%26lt%3B%201)%20%7C%20p0)%3B%20%2F%2F%20%E8%AE%BE%E7%BD%AE%E5%A5%87%E5%81%B6%E6%A0%A1%E9%AA%8C%E4%BD%8D%3C%2FP%3E%3CP%3Ewrite(%22%5BmakeFrame%5D%20Final%20frame%20%3D%200x%2504X%22%2C%20f)%3B%3CBR%20%2F%3Ereturn%20f%3B%3CBR%20%2F%3E%7D%3C%2FP%3E%3CP%3E%2F*%20%E7%8A%B6%E6%80%81%26amp%3B%20%E6%95%85%E9%9A%9C%E8%AE%B0%E5%BD%95%20*%2F%3CBR%20%2F%3Evoid%20logSpiStatus(word%20r)%3CBR%20%2F%3E%7B%3CBR%20%2F%3Es4%20%3D%20(r%26gt%3B%26gt%3B%2014)%26amp%3B%201%3B%3CBR%20%2F%3Es3%20%3D%20(r%26gt%3B%26gt%3B%2013)%26amp%3B%201%3B%3CBR%20%2F%3Es2%20%3D%20(r%26gt%3B%26gt%3B%2012)%26amp%3B%201%3B%3CBR%20%2F%3Es1%20%3D%20(r%26gt%3B%26gt%3B%2011)%26amp%3B%201%3B%3CBR%20%2F%3Es0%20%3D%20(r%26gt%3B%26gt%3B%2010)%26amp%3B%201%EF%BC%9B%3C%2FP%3E%3CP%3Estatus%20%3D%20(r%26gt%3B%26gt%3B%2010)%26amp%3B%200x1F%3B%3CBR%20%2F%3Edata%20%3D%20(r%26gt%3B%26gt%3B%202)%26amp%3B%200xFF%EF%BC%9B%3C%2FP%3E%3CP%3Ewrite(%22%5BSPI%20%E7%8A%B6%E6%80%81%E4%BD%8D%5D%20s4%3D%25d%20s3%3D%25d%20s2%3D%25d%20s1%3D%25d%20s0%3D%25d%20%7C%20Full%20Response%3D0x%2504X%22%2C%20s4%2C%20s3%2C%20s2%2C%20s1%2C%20s0%2C%20r)%3B%3CBR%20%2F%3Ewrite(%22%5BSPI%20%E8%A7%A3%E7%A0%81%5D%20Status%3D0x%2502X%20Data%3D0x%2502X%22%2C%20status%2C%20data)%EF%BC%9B%3C%2FP%3E%3CP%3Eif%20(s4)%20%E5%86%99%E5%85%A5%20(%22%20%E6%95%85%E9%9A%9C%EF%BC%9A%E4%BF%9D%E7%95%99%E6%95%85%E9%9A%9C%20(%E6%9C%AA%E5%AE%9A%E4%B9%89)%20%22)%EF%BC%9Bi%20%3CBR%20%2F%3E%20f%20(s3)%20%E5%86%99%E5%85%A5%EF%BC%88%22%20%E9%94%99%E8%AF%AF%EF%BC%9A%E5%BF%BD%E7%95%A5%E5%91%BD%E4%BB%A4%E6%88%96%E5%85%88%E5%89%8D%E8%AF%BB%E5%8F%96%E6%97%A0%E6%95%88%20%22%EF%BC%89%EF%BC%9Bi%20%3CBR%20%2F%3E%20f%20(s2)%20%E5%86%99%E5%85%A5%EF%BC%88%22%20%E6%95%85%E9%9A%9C%EF%BC%9A%E6%97%B6%E9%92%9F%E9%94%99%E8%AF%AF%20%22%EF%BC%89%EF%BC%9Bi%20%3CBR%20%2F%3E%20f%20(s1)%20%E5%86%99%E5%85%A5%EF%BC%88%22%20%E6%95%85%E9%9A%9C%EF%BC%9A%E5%A5%87%E5%81%B6%E6%A0%A1%E9%AA%8C%E9%94%99%E8%AF%AF%20%22%EF%BC%89%EF%BC%9Bi%20%3CBR%20%2F%3E%20f%20(s0)%20%E5%86%99%E5%85%A5%EF%BC%88%22%20%E6%95%85%E9%9A%9C%EF%BC%9A%E6%80%BB%E7%BA%BF%E4%BA%89%E7%94%A8%E6%88%96%E9%9D%9E%E6%B3%95%E8%AE%BF%E9%97%AE%20%22)%3B%3CBR%20%2F%3E%7D%3C%2FP%3E%3CP%3E%3CBR%20%2F%3E%2F*%20%EF%BC%88s4...s0%20%E9%9D%9E%E9%9B%B6%E8%A1%A8%E7%A4%BA%E6%9C%89%E9%97%AE%E9%A2%98%EF%BC%89%E3%80%82*%2F%3CBR%20%2F%3Eint%20hasFault(word%20r)%3CBR%20%2F%3E%7B%3CBR%20%2F%3Ereturn%20(((r%26gt%3B%26gt%3B%2014)%26amp%3B%201)%20%7C%7C((r%26gt%3B%26gt%3B%2013)%26amp%3B%201)%20%7C%7C((r%26gt%3B%26gt%3B%2012)%26amp%3B%201)%20%7C%7C((r%26gt%3B%26gt%3B%20%26amp%3B%2011)%201)%20%7C%7C((r%26gt%3B%26gt%3B%2010)%26amp%3B%201))%3B%3CBR%20%2F%3E%7D%3C%2FP%3E%3CP%3E%2F*%20%E5%9C%A8%20MOSI%20%E4%B8%8A%E9%98%9F%E5%88%97%E4%B8%80%E4%B8%AA%2016%20%E4%BD%8D%E5%B8%A7%EF%BC%88%E6%AD%A4%E5%A4%84%E9%A9%B1%E5%8A%A8%20CS%20%E4%BD%8E%E7%94%B5%E5%B9%B3%EF%BC%89%20*%2F%3C%2FP%3E%3CP%3E%3CBR%20%2F%3Evoid%20sendFrame%EF%BC%88%E5%8D%95%E8%AF%8D%E5%B8%A716%EF%BC%89%3CBR%20%2F%3E%7B%3CBR%20%2F%3EtxBuffer%20%5B0%5D%20%3D%EF%BC%88%E5%AD%97%E8%8A%82%EF%BC%89%EF%BC%88%E5%B8%A716%20%26gt%3B%20%26gt%3B%208%EF%BC%89%EF%BC%9BTxBuffer%20%5B1%5D%20%3D%EF%BC%88%E5%AD%97%E8%8A%82%EF%BC%89%EF%BC%88%E5%B8%A716%20%26amp%3B%200%20%3CBR%20%2F%3E%20xFF%EF%BC%89%EF%BC%9B%3CBR%20%2F%3EsensorQueueMosiData%EF%BC%88%22%20SENSOR%3A%3A%20SPI%3A%3A%20Master_Port%3A%3A%20nbp_Sensor%20%22%EF%BC%8CTxBuffer%EF%BC%8C16%EF%BC%89%EF%BC%9B%7D%20%3CBR%20%2F%3E%3C%2FP%3E%3CP%3E%2F*%20%E9%AB%98%E7%BA%A7%EF%BC%9A%E5%AE%89%E6%8E%92%E8%AF%BB%E5%8F%96%2F%E5%86%99%E5%85%A5%E6%93%8D%E4%BD%9C%20*%2F%3C%2FP%3E%3CP%3Evoid%20spiReadByte(word%20addr)%3CBR%20%2F%3E%7B%3CBR%20%2F%3Etr_addr%20%3D%20addr%3B%3CBR%20%2F%3Etr_op%20%3D%20OP_RD%3B%3CBR%20%2F%3Etr_retry%3D%200%3B%3CBR%20%2F%3EspiSub%20%3D%20TX1%3B%3CBR%20%2F%3EsetTimer(tSpi%2C%201)%3B%3CBR%20%2F%3E%7D%3C%2FP%3E%3CP%3Evoid%20SpiWriteByte%EF%BC%88%E5%8D%95%E8%AF%8D%E5%9C%B0%E5%9D%80%EF%BC%8C%E5%AD%97%E8%8A%82%E6%95%B0%E6%8D%AE%EF%BC%89%3CBR%20%2F%3E%7Btr_addr%20%3D%20%3CBR%20%2F%3E%20addr%EF%BC%9Btr_wdata%20%3D%20%3CBR%20%2F%3E%20%E6%95%B0%E6%8D%AE%EF%BC%9Btr_%20%3CBR%20%2F%3E%20op%20%3D%20OP_WR%EF%BC%9Btr_retry%3D%200%EF%BC%9BspiSub%20%3D%20TX1%EF%BC%9BsetTimer%EF%BC%88%3CBR%20%2F%3EtsPi%EF%BC%8C1%EF%BC%89%EF%BC%9B%7D%20%3CBR%20%2F%3E%20%3CBR%20%2F%3E%20%3CBR%20%2F%3E%3C%2FP%3E%3CP%3E%3CBR%20%2F%3E%2F*%20SPI%20Micro-FSM%20*%2F%3CBR%20%2F%3Eon%20timer%20tSpi%3CBR%20%2F%3E%7B%3CBR%20%2F%3Eswitch%20(spiSub)%3CBR%20%2F%3E%7B%3C%2FP%3E%3CP%3E%2F*%20TX1%20*%2F%3CBR%20%2F%3E%E6%A1%88%E4%BE%8B%20TX1%EF%BC%9A%3C%2FP%3E%3CP%3E%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F42252%22%20target%3D%22_blank%22%3E%40VTS%3C%2FA%3E%3A%3AVT2710_1_DIO_Ch2%3A%3ADigitalOutput6%20%3D%200%20%3B%20%2F%2F%20CS%20low%3CBR%20%2F%3E%3CBR%20%2F%3Eif%20(USE_READY_GATE%26amp%3B%26amp%3B%20(tr_addr%20!%3D%20ADDR_SPIOPS))%3CBR%20%2F%3E%7B%3CBR%20%2F%3EintAsserted%20%3D%20(active_IntPol%20%3F(intLevel%20%3D%3D%201)%20%3A%20(intLevel%20%3D%3D%200))%3B%3CBR%20%2F%3Eif(%20b_INTF%26amp%3B%26amp%3B%20!intAsserted)%3CBR%20%2F%3E%7B%3CBR%20%2F%3Ewrite(%22%5BSPI%5D%20Waiting%20for%20READY%20before%20first%20TX1%20-%20Sensor%20initiated%22)%3B%3CBR%20%2F%3EsetTimer(tSpi%2C%201)%3B%3CBR%20%2F%3Ebreak%3B%3CBR%20%2F%3E%7D%3CBR%20%2F%3E%7D%3C%2FP%3E%3CP%3E%3CBR%20%2F%3EcurFrame%20%3D%20needDummy%20%3FmakeNbp8sFrame(0%2C%200x0000)%3A%20makeNbp8sFrame((tr_op%20%3D%3D%20OP_WR)%20%3F1%20%3A%200%2C%20tr_addr%EF%BC%89%EF%BC%9B%3C%2FP%3E%3CP%3Ewrite(%22%5BTX1%5D%20Master%20--%26gt%3B%20Sensor%EF%BC%9AFrame%20%3D%200x%2504X%20(R%2FW%3D%25d%20Addr%3D0x%2504X)%22%2CcurFrame%2C%20(curFrame%26gt%3B%26gt%3B%2015)%26amp%3B%201%2C%20(curFrame%26gt%3B%26gt%3B%202)%26amp%3B%200x1FFF)%3B%3CBR%20%2F%3EsendFrame(curFrame)%3B%3CBR%20%2F%3EspiSub%20%3D%20RX1%3B%3CBR%20%2F%3EsetTimer(tSpi%2C%201)%3B%3CBR%20%2F%3Ebreak%EF%BC%9B%3C%2FP%3E%3CP%3E%2F*%20RX1%EF%BC%88R0%20%E4%BD%8D%E4%BA%8E%20TX1%20%E4%B9%8B%E5%90%8E%EF%BC%89*%2F%3CBR%20%2F%3E%20case%20RX1%3A%3CBR%20%2F%3E%20misoHi%20%3D%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F149080%22%20target%3D%22_blank%22%3E%20%3C%2FA%3E%3Ca%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F149080%22%3E%40sensor%3C%2Fa%3E%3A%3ASPI%3A%3AMaster_Port%3A%3ANBP_Sensor%3A%3AFrame1.MISO_Signals.MISO_High_byte%3B%3CBR%20%2F%3E%20misoLo%20%3D%20%3Ca%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F149080%22%3E%40sensor%3C%2Fa%3E%3A%3ASPI%3A%3AMaster_Port%3A%3ANBP_Sensor%3A%3AFrame1.MISO_Signals.MISO_High_byteMISO_High_byte%3B%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F149080%22%20target%3D%22_blank%22%3E%20misoLo%20%3D%20%40sensor%3A%3ASPI%3A%3AMaster_Port%3A%3ANBP_Sensor%3A%3AFrame1.MISO_Signals.MISO_Low_byte%3B%3C%2FA%3E%3CBR%20%2F%3E%20spiResp%20%3D%20((word)misoHi%26lt%3B%26lt%3B%20%3CLI-EMOJI%20id%3D%22lia_smiling-face-with-sunglasses%22%20title%3D%22%3Asmiling_face_with_sunglasses%3A%22%3E%3C%2FLI-EMOJI%3E%20%7C%20misoLo%3B%3CBR%20%2F%3Ewrite(%22%5BRX1%5D%20Sensor%20--%26gt%3B%20Master%EF%BC%9AResponse%20%3D%200x%2504X%20(Status%3D0x%2502X%20Data%3D0x%2502X)%22%2CspiResp%2C%20(spiResp%26gt%3B%26gt%3B%2010)%26amp%3B%200x1F%2C%20(spiResp%26gt%3B%26gt%3B%202)%26amp%3B%200xFF)%3B%3CBR%20%2F%3Eif%20(needDummy)%20%7B%3CBR%20%2F%3EneedDummy%20%3D%200%3B%3CBR%20%2F%3EspiSub%20%3D%20TX1%3B%3CBR%20%2F%3EsetTimer(tSpi%2C%201)%3B%3CBR%20%2F%3Ebreak%3B%3CBR%20%2F%3E%7D%3C%2FP%3E%3CP%3E%2F%2F%20%E6%AD%A3%E7%A1%AE%E5%A4%84%E7%90%86%E6%95%85%E9%9A%9C%3CBR%20%2F%3ElogSpiStatus(spiResp)%3B%3CBR%20%2F%3Eif(tr_addr%20!%3D%20ADDR_SPIOPS)%3CBR%20%2F%3E%7B%3CBR%20%2F%3Es4%20%3D%20(spiResp%26gt%3B%26gt%3B%2014)%26amp%3B%201%3B%3CBR%20%2F%3Es3%20%3D%20(spiResp%26gt%3B%26gt%3B%2013)%26amp%3B%201%3B%3CBR%20%2F%3Es2%20%3D%20(spiResp%26gt%3B%26gt%3B%2012)%26amp%3B%201%3B%3CBR%20%2F%3Es1%20%3D%20(spiResp%26gt%3B%26gt%3B%2011)%26amp%3B%201%3B%3CBR%20%2F%3Es0%20%3D%20(spiResp%26gt%3B%26gt%3B%2010)%26amp%3B%201%EF%BC%9B%3C%2FP%3E%3CP%3Eif%20(s2)%20%7B%20%2F%2F%20Clock%20fault%3CBR%20%2F%3Eif%20(tr_retry%26lt%3B%204)%20%7B%3CBR%20%2F%3Ewrite(%22%5BSPI%5D%20Clock%20fault%3A%20dummy%2Bretry%22)%3B%3CBR%20%2F%3EneedDummy%20%3D%201%3B%20tr_retry%2B%2B%3B%3CBR%20%2F%3EspiSub%20%3D%20TX1%3B%20setTimer(tSpi%2C%205)%3B%3CBR%20%2F%3Ebreak%3B%3CBR%20%2F%3E%7D%3C%2FP%3E%3CP%3Etr_op%20%3D%20OP_NONE%3B%3CBR%20%2F%3EspiSub%20%3D%20IDLE%3B%3CBR%20%2F%3Ebreak%3B%3CBR%20%2F%3E%7D%3C%2FP%3E%3CP%3Eif%20(s3%20%7C%7C%20s4)%20%7B%3CBR%20%2F%3Ewrite(%22%5BSPI%5D%20Fatal%20fault%20(Reserved%2FPrevious%20read%2Fwrite)%20error%2C%20aborting%20transfer%22)%EF%BC%9B%3C%2FP%3E%3CP%3Etr_op%20%3D%20OP_NONE%3B%3CBR%20%2F%3EspiSub%20%3D%20IDLE%3B%3CBR%20%2F%3Ebreak%3B%3CBR%20%2F%3E%7D%3C%2FP%3E%3CP%3Eif%20(s1%20%7C%7C%20s0)%20%7B%3CBR%20%2F%3Eif%20(tr_retry%26lt%3B%204)%20%7B%3CBR%20%2F%3Ewrite(%22%5BSPI%5D%20SPI%20fault%20(s1%2Fs0)%20%3A%20dummy%2Bretry%22)%3B%3CBR%20%2F%3EneedDummy%20%3D%201%3B%3CBR%20%2F%3Etr_retry%2B%2B%3B%3CBR%20%2F%3EspiSub%20%3D%20TX1%3B%3CBR%20%2F%3EsetTimer(tSpi%2C%201)%3B%3CBR%20%2F%3Ebreak%3B%3CBR%20%2F%3E%7D%3C%2FP%3E%3CP%3Etr_op%20%3D%20OP_NONE%3B%3CBR%20%2F%3EspiSub%20%3D%20IDLE%3B%3CBR%20%2F%3Ebreak%3B%3CBR%20%2F%3E%7D%3CBR%20%2F%3E%7D%3C%2FP%3E%3CP%3Eif%20(tr_op%20%3D%3D%20OP_WR)%20%7B%3CBR%20%2F%3EcurFrame%20%3D%20makeNbp8sFrame(1%2C%20tr_wdata)%3B%3CBR%20%2F%3Ewrite(%22%5BTX2%5D%20Master%20--%26gt%3B%20%E4%BC%A0%E6%84%9F%E5%99%A8%EF%BC%9A%E6%95%B0%E6%8D%AE%E5%B8%A7%20%3D%200x%2504X%22%2C%20curFrame)%3B%3CBR%20%2F%3EsendFrame(curFrame)%3B%3CBR%20%2F%3EspiSub%20%3D%20RX2%3B%3CBR%20%2F%3EsetTimer(tSpi%2C%205)%3B%3CBR%20%2F%3Ebreak%3B%3CBR%20%2F%3E%7D%3C%2FP%3E%3CP%3E%2F*%20%E5%AF%B9%E4%BA%8E%20READ%20%E5%8F%91%E9%80%81%E8%99%9A%E6%8B%9F%E5%B8%A7%20*%2F%3CBR%20%2F%3Eelse%20if%20(tr_op%20%3D%3D%20OP_RD)%20%7B%3CBR%20%2F%3EcurFrame%20%3D%20makeNbp8sFrame(0%2C%200x0000)%3B%3CBR%20%2F%3Ewrite(%22%5BTX2%5D%20Master%20--%26gt%3B%20Sensor%EF%BC%9ADummy%20Frame%20%3D%200x%2504X%22%2C%20curFrame)%3B%3CBR%20%2F%3EsendFrame(curFrame)%3B%3CBR%20%2F%3EspiSub%20%3D%20RX2%3B%3CBR%20%2F%3EsetTimer(tSpi%2C%201)%3B%3CBR%20%2F%3Ebreak%3B%3CBR%20%2F%3E%7D%3C%2FP%3E%3CP%3E%2F*%20TX2%20*%2F%3CBR%20%2F%3Ecase%20TX2%3A%3CBR%20%2F%3EspiSub%20%3D%20RX2%3B%3CBR%20%2F%3EsetTimer(tSpi%2C%201)%3B%3CBR%20%2F%3Ebreak%EF%BC%9B%3C%2FP%3E%3CP%3E*%2F%3CBR%20%2F%3E%20case%20RX2%3A%3CBR%20%2F%3E%3CBR%20%2F%3E%20misoHi%20%3D%20%3Ca%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F149080%22%3E%40sensor%3C%2Fa%3E%3A%3ASPI%3A%3AMaster_Port%3A%3ANBP_Sensor%3A%3AFrame1.MISO_Signals.%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F149080%22%20target%3D%22_blank%22%3E%20%3C%2FA%3EMISO_High_byte%3B%3CBR%20%2F%3E%20misoLo%20%3D%20%3Ca%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F149080%22%3E%40sensor%3C%2Fa%3E%3A%3ASPI%3A%3AMaster_Port%3A%3ANBP_Sensor%3A%3AFrame1.MISO_Signals.MISO_High_byte.MISO_High_byte%3B%20misoLo%20%3D%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F149080%22%20target%3D%22_blank%22%3E%20%3C%2FA%3E%3Ca%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F149080%22%3E%40sensor%3C%2Fa%3E%3A%3ASPI%3A%3AMaster_Port%3A%3ANBP_Sensor%3A%3AFrame1.MISO_Signals.MISO_Low_byte%3B%3CBR%20%2F%3E%20spiResp%20%3D%20((word)misoHi%26lt%3B%26lt%3B%20%3CLI-EMOJI%20id%3D%22lia_smiling-face-with-sunglasses%22%20title%3D%22%3Asmiling_face_with_sunglasses%3A%22%3E%3C%2FLI-EMOJI%3E%20%7C%20misoLo%3B%3CBR%20%2F%3E%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F42252%22%20target%3D%22_blank%22%3E%20%3C%2FA%3E%3Ca%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F42252%22%3E%40VTS%3C%2Fa%3E%3A%3AVT2710_1_DIO_Ch2%3A%3ADigitalOutput6%20%3D%201%20%3B%20%2F%2F%20CS%20high%3CBR%20%2F%3E%20setTimer(tDelay%2C%2010)%3B%3CBR%20%2F%3E%20write(%22%5BRX2%5D%20Sensor--%26gt%3B%20Master%EF%BC%9AResponse%20%3D%200x%2504X%20(Status%3D0x%2502X%20Data%3D0x%2502X)%22%2CspiResp%2C%20(spiResp%26gt%3B%26gt%3B%2010)%26amp%3B%200x1F%2C%20(spiResp%26gt%3B%26gt%3B%202)%26amp%3B%200xFF)%EF%BC%9B%3C%2FP%3E%3CP%3ElogSpiStatus(spiResp)%3B%20%2F%2F%20correct%20fault%20handling%20*%2F%3CBR%20%2F%3Eif(tr_addr%20!%3D%20ADDR_SPIOPS)%3CBR%20%2F%3E%7B%3CBR%20%2F%3Es4%20%3D%20(spiResp%26gt%3B%26gt%3B%2014)%26amp%3B%201%3B%3CBR%20%2F%3Es3%20%3D%20(spiResp%26gt%3B%26gt%3B%2013)%26amp%3B%201%3B%3CBR%20%2F%3Es2%20%3D%20(spiResp%26gt%3B%26gt%3B%2012)%26amp%3B%201%3B%3CBR%20%2F%3Es1%20%3D%20(spiResp%26gt%3B%26gt%3B%2011)%26amp%3B%201%3B%3CBR%20%2F%3Es0%20%3D%20(spiResp%26gt%3B%26gt%3B%2010)%26amp%3B%201%EF%BC%9B%3C%2FP%3E%3CP%3Eif%20(s2)%20%7B%20%2F%2F%20Clock%20fault%3CBR%20%2F%3Eif%20(tr_retry%26lt%3B%204)%20%7B%3CBR%20%2F%3Ewrite(%22%5BSPI%5D%20Clock%20fault%3A%20dummy%2Bretry%22)%3B%3CBR%20%2F%3EneedDummy%20%3D%201%3B%3CBR%20%2F%3Etr_retry%2B%2B%3B%3CBR%20%2F%3EspiSub%20%3D%20TX1%3B%3CBR%20%2F%3EsetTimer(tSpi%2C%201)%3B%3CBR%20%2F%3Ebreak%3B%3CBR%20%2F%3E%7D%3CBR%20%2F%3Etr_op%20%3D%20OP_NONE%3B%3CBR%20%2F%3EspiSub%20%3D%20IDLE%3B%3CBR%20%2F%3Ebreak%3B%3CBR%20%2F%3E%7D%3C%2FP%3E%3CP%3Eif%20(s3%20%7C%7C%20s4)%20%7B%3CBR%20%2F%3Ewrite(%22%5BSPI%5D%20Fatal%20fault%20(parity%2Fcontend)%2C%20aborting%20transfer%22)%3B%3CBR%20%2F%3Etr_op%20%3D%20OP_NONE%3B%3CBR%20%2F%3EspiSub%20%3D%20IDLE%3B%3CBR%20%2F%3Ebreak%3B%3CBR%20%2F%3E%7D%3C%2FP%3E%3CP%3Eif%20(s1%20%7C%7C%20s0)%20%7B%3CBR%20%2F%3Eif%20(tr_retry%26lt%3B%204)%20%7B%3CBR%20%2F%3Ewrite(%22%5BSPI%5D%20SPI%20fault%20(s1%2Fs0)%20%EF%BC%9Adummy%2Bretry%22)%3B%3CBR%20%2F%3EneedDummy%20%3D%201%3B%3CBR%20%2F%3Etr_retry%2B%2B%3B%3CBR%20%2F%3EspiSub%20%3D%20TX1%3B%3CBR%20%2F%3EsetTimer(tSpi%2C%201)%3B%3CBR%20%2F%3Ebreak%3B%3CBR%20%2F%3E%7D%3CBR%20%2F%3Etr_op%20%3D%20OP_NONE%3B%3CBR%20%2F%3EspiSub%20%3D%20IDLE%3B%3CBR%20%2F%3Ebreak%3B%3CBR%20%2F%3E%7D%3CBR%20%2F%3E%7D%3CBR%20%2F%3Eif%20(tr_op%20%3D%3D%20OP_RD)%3CBR%20%2F%3Etr_rdata%20%3D%20(spiResp%26gt%3B%26gt%3B%202)%26amp%3B%200xFF%EF%BC%9B%3C%2FP%3E%3CP%3Etr_op%20%3D%20OP_NONE%3B%3CBR%20%2F%3EspiSub%20%3D%20IDLE%3B%3CBR%20%2F%3EsetTimer(tDelay%2C%201)%3B%3CBR%20%2F%3Ebreak%3B%3CBR%20%2F%3E%7D%3CBR%20%2F%3E%7D%3C%2FP%3E%3CP%3E%2F*%20%E5%AE%9E%E7%94%A8%E7%A8%8B%E5%BA%8F%20*%2F%3CBR%20%2F%3Eint%20spiBusy()%20%7B%20return%20(tr_op%20!%3D%20OP_NONE)%20%7C%7C%20(spiSub%20!%3D%20IDLE)%3B%20%7D%3C%2FP%3E%3CP%3E%2F*%20%E5%90%AF%E5%8A%A8%20*%2F%3CBR%20%2F%3E%E5%90%AF%E5%8A%A8%E6%97%B6%3CBR%20%2F%3E%7B%3CBR%20%2F%3Ewrite(%22NBP8s%20Evaluation%22)%3B%3CBR%20%2F%3EsetTimer(tDelay%2C38)%EF%BC%9B%3C%2FP%3E%3CP%3EneedDummy%20%3D%201%3B%20%2F*%20WAKE%2FCS%20%E6%95%85%E9%9A%9C%E5%90%8E%E7%9A%84%E9%A6%96%E6%AC%A1%E4%BC%A0%E8%BE%93%E5%81%87%E4%BF%A1%E5%8F%B7%20*%2F%3CBR%20%2F%3EmainState%20%3D%200%3B%3CBR%20%2F%3Etr_op%20%3D%20OP_NONE%3B%3CBR%20%2F%3EspiSub%20%3D%20IDLE%3B%3CBR%20%2F%3EstartupWaitDone%20%3D%201%3B%3CBR%20%2F%3EsetTimer(tMain%2C%2035)%3B%3CBR%20%2F%3E%7D%3C%2FP%3E%3CP%3E%2F*%20tDelay%20%3CBR%20%2F%3E%20%E5%9C%A8%E8%AE%A1%E6%97%B6%E5%99%A8%E4%B8%8A%E8%BF%94%E5%9B%9E%E4%B8%BB%E8%8A%82%E7%82%B9%20*%2F%20tDelay%20%3CBR%20%2F%3E%20%7B%3CBR%20%2F%3EsetTimer%20(tMain%2C%205)%3B%7D%20%3CBR%20%2F%3E%3C%2FP%3E%3CP%3E%2F*%20%E4%B8%BB%20FSM%20*%2F%3CBR%20%2F%3E%20%E5%BC%80%E5%90%AF%E8%AE%A1%E6%97%B6%E5%99%A8%20tMain%7B%3CBR%20%2F%3E%20%3CBR%20%2F%3EsetTimer(tMain%2C%201)%3B%3CBR%20%2F%3E%3CBR%20%2F%3E%20%2F*%20%E7%8A%B6%E6%80%81%E6%9C%BA%20*%2F%3CBR%20%2F%3E%20switch%20(mainState)%7B%3CBR%20%2F%3E%20%3CBR%20%2F%3E%2F*%20SPIOPS%20%E6%8F%A1%E6%89%8B%20*%2F%3CBR%20%2F%3E%20case%200%3A%3CBR%20%2F%3E%20if%20(spiBusy())%20break%3B%3CBR%20%2F%3E%20%2F%2F%20%E5%A6%82%E6%9E%9C%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%A4%84%E4%BA%8E%E5%BE%85%E5%A4%84%E7%90%86%E7%8A%B6%E6%80%81%EF%BC%88%E4%BE%8B%E5%A6%82%3CBR%20%2F%3E%20RESET%2F%E6%95%85%E9%9A%9C%E4%B9%8B%E5%90%8E%EF%BC%89%EF%BC%8C%E5%88%99%E5%B0%86%E5%85%B6%E5%86%99%E5%85%A5%EF%BC%88%22SPIOPS%20-%20%E7%94%A8%E4%BA%8E%E6%B8%85%E9%99%A4%E5%90%AF%E5%8A%A8%E7%9A%84%E8%99%9A%E6%8B%9F%E6%A1%86%E6%9E%B6%22%EF%BC%89%EF%BC%9B%3C%2FP%3E%3CP%3E%2F%2F%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F42252%22%20target%3D%22_blank%22%3E%20%40VTS%3A%3A%3C%2FA%3E%20vt2710_1_dio_CH2%3A%3A%20digitalOutput6%20%3D%200%3B%2F%2FCS%20%E4%BD%8E%3CBR%20%2F%3E%20%2F%2FsetTimer%20(tDelay%2C%202)%3B%2F%2F%3CBR%20%2F%3E%20%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F42252%22%20target%3D%22_blank%22%3E%3C%2FA%3E%3Ca%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F42252%22%3E%40VTS%3C%2Fa%3E%3A%3A%20vt2710_1_dio_CH2%3A%3A%20digitalOutput6%20%3D%201%3B%20%2F%2FCS%3CBR%20%2F%3E%20%3CBR%20%2F%3E%3CBR%20%2F%3E%E9%AB%98%2F%2F%E8%AE%BE%E7%BD%AE%E8%AE%A1%E6%97%B6%E5%99%A8%EF%BC%88TDelay%EF%BC%8C5%EF%BC%89%EF%BC%9B%2F%2F%E8%99%9A%E6%8B%9F%E5%B8%A7%EF%BC%88%E8%A2%AB%E8%AE%BE%E5%A4%87%E5%BF%BD%E7%95%A5%EF%BC%89%E8%AE%BE%E7%BD%AE%E8%AE%A1%E6%97%B6%E5%99%A8%3CBR%20%2F%3E%20(TDelay%2C5)%3B%3C%2FP%3E%3CP%3EneedDummy%20%3D%200%3B%3CBR%20%2F%3EsetTimer(tDelay%2C5)%3B%3CBR%20%2F%3EmainState%20%3D%201%3B%3CBR%20%2F%3Ebreak%EF%BC%9B%3C%2FP%3E%3CP%3Ecase%201%3A%3CBR%20%2F%3Eif%20(spiBusy())%20break%3B%3CBR%20%2F%3Ewrite(%22SPIOPS%20-%20SENSOR%20Ready%20%2C%20proceeding%20to%20write%22)%3B%3CBR%20%2F%3EspiWriteByte(ADDR_SPIOPS%2C%200x04)%3B%20%2F%2F%20write%20SPIOPS%20%3D%200x04%3CBR%20%2F%3EsetTimer(tDelay%2C5)%3B%3CBR%20%2F%3EmainState%20%3D%202%3B%3CBR%20%2F%3Ebreak%EF%BC%9B%3C%2FP%3E%3CP%3Ecase%202%3A%3CBR%20%2F%3Eif%20(spiBusy())%20break%3B%3CBR%20%2F%3EspiReadByte(ADDR_SPIOPS)%3B%20%2F%2F%20read%20back%20SPIOPS%3CBR%20%2F%3EsetTimer(tDelay%2C%205)%3B%3CBR%20%2F%3EmainState%20%3D%203%3B%3CBR%20%2F%3Ebreak%EF%BC%9B%3C%2FP%3E%3CP%3Ecase%203%3A%3CBR%20%2F%3Eif%20(spiBusy())%20break%3B%3CBR%20%2F%3EmainState%20%3D%204%3B%3CBR%20%2F%3Ebreak%EF%BC%9B%3C%2FP%3E%3CP%3E%E6%83%85%E5%86%B5%204%3A%3CBR%20%2F%3Eif%20(spiBusy())%20break%EF%BC%9B%3C%2FP%3E%3CP%3E%2F%2F%E4%BD%BF%E7%94%A8%20tr_rdata%EF%BC%88%E6%8D%95%E8%8E%B7%E7%9A%84%E5%AD%97%E8%8A%82%EF%BC%89%E8%80%8C%E4%B8%8D%E6%98%AF%20SpireSP%20%E4%BD%8D%20%3CBR%20%2F%3E%20regsPIOps%20%3D%EF%BC%88%E5%AD%97%E8%8A%82%EF%BC%89(tr_rdata%20%26amp%3B%200x07)%3B%3C%2FP%3E%3CP%3E%2F%2F%20%E5%A6%82%E6%9E%9C%20HOLD%20%E6%BF%80%E6%B4%BB%EF%BC%8C%E4%B8%94%E8%8C%83%E5%9B%B4%2000%20-%26gt%3B%20SPIOPS%20%E5%BF%85%E9%A1%BB%E4%B8%BA%200x04%3CBR%20%2F%3Eif%20(regSPIOPS%20%3D%3D%200x04)%20%7B%3CBR%20%2F%3Ewrite(%22SPIOPS%EF%BC%9ASET%20OK%20(0x%2502X)%22%2C%20regSPIOPS)%3B%3CBR%20%2F%3EmainState%20%3D%2010%3B%20%2F%2F%20go%20to%20FW%2FHW%20read%3CBR%20%2F%3E%7D%3CBR%20%2F%3Eelse%20%7B%3CBR%20%2F%3Ewrite(%22SPIOPS%20NOT%20READY%20(SPIOPS%20%3D%200x%2502X)%20--%26gt%3B%20retrying%22%2C%20regSPIOPS)%3B%3CBR%20%2F%3EneedDummy%20%3D%201%3B%3CBR%20%2F%3EsetTimer(tDelay%2C5)%3B%3CBR%20%2F%3EmainState%20%3D%201%20%3B%3CBR%20%2F%3E%7D%3CBR%20%2F%3Ebreak%EF%BC%9B%3C%2FP%3E%3CP%3E%2F*%20FW%20%2F%20HW%20READ%20SEQUENCE%20*%2F%3CBR%20%2F%3Ecase%2010%3A%3CBR%20%2F%3Eif%20(spiBusy())%20break%3B%3CBR%20%2F%3Ewrite(%22SPIOPS%20%E5%B7%B2%E7%BB%8F%E8%AE%BE%E7%BD%AE%E4%B8%BA%200x04%20--%26gt%3B%20Firmware%20window%20active%22)%3B%3CBR%20%2F%3Ewrite(%22Reading%20FW_DERIV%20(0x0805)..%22)%3B%3CBR%20%2F%3EspiReadByte(ADDR_FW_DERIV)%3B%3CBR%20%2F%3EsetTimer(tDelay%2C%205)%3B%3CBR%20%2F%3EmainState%20%3D%2011%3B%3CBR%20%2F%3Ebreak%EF%BC%9B%3C%2FP%3E%3CP%3Ecase%2011%3A%3CBR%20%2F%3Eif%20(spiBusy())%20break%3B%3CBR%20%2F%3Ewrite(%22FW_DERIV%20%3D%200x%2502X%22%2C%20tr_rdata)%3B%3CBR%20%2F%3Ewrite(%22Reading%20FW_VER%20(0x0804)...%22)%3B%3CBR%20%2F%3EspiReadByte(ADDR_FW_VER)%3B%3CBR%20%2F%3EsetTimer(tDelay%2C%205)%3B%3CBR%20%2F%3EmainState%20%3D%2012%3B%3CBR%20%2F%3Ebreak%EF%BC%9B%3C%2FP%3E%3CP%3Ecase%2012%3A%3CBR%20%2F%3Eif%20(spiBusy())%20break%3B%3CBR%20%2F%3Ewrite(%22FW_VER%20%3D%200x%2502X%22%2C%20tr_rdata)%3B%3CBR%20%2F%3EsetTimer(tDelay%2C%205)%3B%3CBR%20%2F%3EmainState%20%3D%2013%3B%3CBR%20%2F%3Ebreak%EF%BC%9B%3C%2FP%3E%3CP%3E%E6%A1%88%E4%BE%8B%2013%EF%BC%9A%3CBR%20%2F%3E%E5%A6%82%E6%9E%9C%20(spiBusy%20())%20%E4%B8%AD%E6%96%AD%EF%BC%9B%3CBR%20%2F%3E%E5%86%99%E5%85%A5%20(%22%20%E6%B8%85%E9%99%A4%20SPIOPS%20(0x0038)%20%E4%BB%A5%E7%89%88%E6%9C%AC%20NBP8s%20CPU%20%22)%EF%BC%9BSpiWriteB%20%3CBR%20%2F%3E%20yte%20(ADDR_SPIOPS%EF%BC%8C0x00)%EF%BC%9B%3CBR%20%2F%3EsetTimer%20(tDelay%EF%BC%8C5)%EF%BC%9BmainState%20%3D%2014%EF%BC%9Bbreak%EF%BC%9B%3CBR%20%2F%3E%3CBR%20%2F%3E%E6%A1%88%E4%BE%8B%2014%EF%BC%9Ai%20%3CBR%20%2F%3E%20f%20(spiBusy%20())%20%E4%B8%AD%E6%96%AD%EF%BC%9B%E5%86%99%E5%85%A5%20(%22%20FW%20%E8%AF%BB%E5%8F%96%E5%AE%8C%E6%88%90%20%22)%EF%BC%9B%3CBR%20%2F%3EmainState%20%3D%2099%EF%BC%9B%E4%B8%AD%3CBR%20%2F%3E%E6%96%AD%3B%20%3CBR%20%2F%3E%20%3CBR%20%2F%3E%20%3CBR%20%2F%3E%3C%2FP%3E%3CP%3E%E6%83%85%E5%86%B5%2099%EF%BC%9A%3CBR%20%2F%3E%2F%2F%20%E7%A9%BA%E9%97%B2%2F%E5%81%9C%E6%AD%A2%3CBR%20%2F%3Ebreak%3B%3CBR%20%2F%3E%7D%7D%3C%2FP%3E%3CP%3E%E4%BB%BB%E4%BD%95%E5%BB%BA%E8%AE%AE%E5%92%8C%E5%8F%8D%E9%A6%88%E9%83%BD%E5%B0%86%E6%9C%89%E5%8A%A9%E4%BA%8E%E5%8F%96%E5%BE%97%E8%BF%9B%E4%B8%80%E6%AD%A5%E8%BF%9B%E5%B1%95%E3%80%82%3CBR%20%2F%3E%3CBR%20%2F%3E%E8%87%B4%E4%BB%A5%E6%9C%80%E8%AF%9A%E6%8C%9A%E7%9A%84%E9%97%AE%E5%80%99%3CBR%20%2F%3E%3CBR%20%2F%3E%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-LABS%20id%3D%22lingo-labs-2246790%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CLINGO-LABEL%3E%E5%8E%8B%E5%8A%9B%E4%BC%A0%E6%84%9F%E5%99%A8%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2247154%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20NBP8s%20integration%20with%20Vector%20system%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2247154%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%E4%BD%A0%E5%A5%BD%EF%BC%8C%E6%89%98%E9%A9%AC%E6%96%AF%3CBR%20%2F%3E%E9%9D%9E%E5%B8%B8%E6%84%9F%E8%B0%A2%E4%BD%A0%E7%9A%84%E5%BF%AB%E9%80%9F%E5%9B%9E%E5%A4%8D%E3%80%82%E9%85%8D%E7%BD%AE%E4%B8%8E%E6%95%B0%E6%8D%AE%E8%A1%A8%E4%B8%AD%E5%AE%9A%E4%B9%89%E7%9A%84%E5%AE%8C%E5%85%A8%E7%9B%B8%E5%90%8C%EF%BC%8C%E6%88%91%E6%AD%A3%E5%9C%A8%E6%8C%89%E7%85%A7%E6%82%A8%E6%A6%82%E8%BF%B0%E7%9A%84%E7%9B%B8%E5%90%8C%E6%AD%A5%E9%AA%A4%E8%BF%9B%E8%A1%8C%E6%93%8D%E4%BD%9C%E3%80%82%3CBR%20%2F%3E%3CBR%20%2F%3E%E6%88%91%E5%B0%9D%E8%AF%95%E8%AE%BE%E7%BD%AE%20SPIOPS%EF%BC%8C%E4%BD%86%E4%BC%A0%E6%84%9F%E5%99%A8%E7%9A%84%E5%93%8D%E5%BA%94%E6%98%AF%200x0220%EF%BC%8C%E8%80%8C%E4%B8%94%E9%9A%8F%E5%90%8E%E7%9A%84%E5%93%8D%E5%BA%94%E4%B9%9F%E4%BF%9D%E6%8C%81%E4%B8%8D%E5%8F%98%E3%80%82%3CBR%20%2F%3E%E6%88%91%E4%B8%8D%E7%A1%AE%E5%AE%9A%E6%88%91%E6%98%AF%E5%90%A6%E9%81%97%E6%BC%8F%E4%BA%86%E4%BB%80%E4%B9%88%E3%80%82%3CBR%20%2F%3E%E5%AF%B9%E6%AD%A4%E6%9C%89%E4%BB%80%E4%B9%88%E7%9C%8B%E6%B3%95%EF%BC%9F%3CBR%20%2F%3E%3CBR%20%2F%3E%E8%87%B4%E4%BB%A5%E6%9C%80%E5%B4%87%E9%AB%98%E7%9A%84%E6%95%AC%E6%84%8F%EF%BC%8C'%3CBR%20%2F%3ERajvishnu%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2246835%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20NBP8s%20integration%20with%20Vector%20system%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2246835%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E4%BD%A0%E5%A5%BD%EF%BC%8C%E6%8B%89%E6%9D%B0%E7%BB%B4%E4%BB%80%E5%8A%AA%E3%80%81%3C%2FP%3E%0A%3CP%3ENBP8%20%E4%BC%A0%E6%84%9F%E5%99%A8%E4%BD%BF%E7%94%A8%20SPI%20%E6%A8%A1%E5%BC%8F%200%EF%BC%88CPOL%3D0%EF%BC%8CCPHA%3D0%EF%BC%89%EF%BC%8C16%20%E4%BD%8D%E5%B8%A7%EF%BC%8C%E4%B8%A4%E7%BB%84%E4%BD%8D%E5%81%B6%E5%A5%87%E5%81%B6%E6%A0%A1%E9%AA%8C%E3%80%82%E7%A1%AE%E4%BF%9D%20Vector%20VT2710%20SPI%20%E8%AE%BE%E7%BD%AE%E4%B8%8E%E6%AD%A4%E7%9B%B8%E7%AC%A6%E3%80%82%20%E5%9C%A8%E5%94%A4%E9%86%92%E6%88%96%E4%BB%BB%E4%BD%95%20CS_B%20%E6%95%85%E9%9A%9C%E4%B9%8B%E5%90%8E%EF%BC%8C%E7%94%B1%E4%BA%8E%E6%97%B6%E9%92%9F%E6%95%85%E9%9A%9C%EF%BC%8C%E7%AC%AC%E4%B8%80%E6%9D%A1%20SPI%20%E5%91%BD%E4%BB%A4%E5%B0%86%E8%A2%AB%E5%BF%BD%E7%95%A5%20-%26gt%3B%20%E5%85%88%E5%8F%91%E9%80%81%E4%B8%80%E4%B8%AA%E5%93%91%E5%B8%A7%E6%9D%A5%E6%B8%85%E9%99%A4%E9%94%99%E8%AF%AF%E3%80%82%20%E5%9C%A8%E5%BC%80%E5%A7%8B%20SPI%20%E4%BC%A0%E8%BE%93%E4%B9%8B%E5%89%8D%EF%BC%8C%E8%AF%B7%E5%8A%A1%E5%BF%85%E7%AD%89%E5%BE%85%20READY%20%E5%BC%95%E8%84%9A%E7%A1%AE%E8%AE%A4%E3%80%82%E8%BF%99%E8%A1%A8%E6%98%8E%E4%BC%A0%E6%84%9F%E5%99%A8%E5%B7%B2%E5%87%86%E5%A4%87%E5%B0%B1%E7%BB%AA%EF%BC%8C%E5%85%B6%20CPU%20%E5%B7%B2%E5%81%9C%E6%AD%A2%E8%BF%90%E8%A1%8C%E3%80%82%20%E6%A3%80%E6%9F%A5%20CS_B%20%E6%98%AF%E5%90%A6%E5%9C%A8%E6%AF%8F%E4%B8%AA%E5%B8%A7%E7%9A%84%E6%89%80%E6%9C%89%2016%20%E4%B8%AA%E6%97%B6%E9%92%9F%E5%91%A8%E6%9C%9F%E5%86%85%E9%83%BD%E4%BF%9D%E6%8C%81%E4%BD%8E%E7%94%B5%E5%B9%B3%EF%BC%8C%E4%BB%A5%E5%8F%8A%E5%A5%87%E5%81%B6%E6%A0%A1%E9%AA%8C%E4%BD%8D%E6%98%AF%E5%90%A6%E6%AD%A3%E7%A1%AE%E3%80%82%20%E6%AD%A3%E7%A1%AE%E5%A4%84%E7%90%86%E6%95%85%E9%9A%9C%E4%BD%8D%20(s4..s0)%E3%80%82%E5%A6%82%E6%9E%9C%E6%9C%89%E4%BB%BB%E4%BD%95%E8%AE%BE%E7%BD%AE%EF%BC%8C%E5%88%99%E4%BD%BF%E7%94%A8%E8%99%9A%E6%8B%9F%E5%B8%A7%E9%87%8D%E8%AF%95%E3%80%82s3%EF%BC%88%E5%BF%BD%E7%95%A5%E5%91%BD%E4%BB%A4%EF%BC%89%E4%B9%9F%E9%9C%80%E8%A6%81%E9%87%8D%E8%AF%95%E3%80%82%20%E5%9C%A8%E4%BC%9A%E8%AF%9D%E7%BB%93%E6%9D%9F%E6%97%B6%E6%B8%85%E7%A9%BA%20SPIOPS%20%E5%AF%84%E5%AD%98%E5%99%A8%EF%BC%8C%E4%BB%A5%E6%81%A2%E5%A4%8D%E4%BC%A0%E6%84%9F%E5%99%A8%E7%9A%84%E6%AD%A3%E5%B8%B8%E8%BF%90%E8%A1%8C%E3%80%82%20%E8%BF%99%E4%BA%9B%E6%AD%A5%E9%AA%A4%E9%80%9A%E5%B8%B8%E5%8F%AF%E4%BB%A5%E8%A7%A3%E5%86%B3%E9%9B%86%E6%88%90%E8%BF%87%E7%A8%8B%E4%B8%AD%E7%9A%84%E6%97%A0%E6%95%88%E5%93%8D%E5%BA%94%E3%80%82%3C%2FP%3E%0A%3CP%3EBRs%2C%20Tomas%3C%2FP%3E%3C%2FLINGO-BODY%3E