NBP8s integration with Vector system

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

NBP8s integration with Vector system

1,856件の閲覧回数
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 返答(返信)

1,836件の閲覧回数
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 件の賞賛

1,833件の閲覧回数
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%22UPDATE%22%3ENBP8%E3%81%A8Vector%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AE%E7%B5%B1%E5%90%88%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2246790%22%20slang%3D%22en-US%22%20mode%3D%22UPDATE%22%3E%3CP%3E%E3%81%BF%E3%81%AA%E3%81%95%E3%82%93%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%3CBR%20%2F%3E%3CBR%20%2F%3ENBP8s%20%E5%9C%A7%E5%8A%9B%E3%82%BB%E3%83%B3%E3%82%B5%E3%82%92%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%20%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AB%E7%B5%B1%E5%90%88%E3%81%97%E3%82%88%E3%81%86%E3%81%A8%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82VT2710%20%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC%20%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%81%AB%E3%81%AF%20SPI%20%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%3CBR%20%2F%3E%3CBR%20%2F%3E%E3%81%93%E3%82%8C%E3%81%BE%E3%81%A7%E3%81%AB%E3%81%93%E3%81%AE%E7%B5%B1%E5%90%88%E3%82%92%E8%A9%A6%E3%81%97%E3%81%9F%E4%BA%BA%E3%81%AF%E3%81%84%E3%81%BE%E3%81%99%E3%81%8B%3F%E3%81%82%E3%81%AA%E3%81%9F%E3%81%AE%E6%8F%90%E6%A1%88%E3%82%92%E3%81%9C%E3%81%B2%E7%9F%A5%E3%82%8A%E3%81%9F%E3%81%84%E3%81%A7%E3%81%99%E3%80%82%E3%82%BB%E3%83%B3%E3%82%B5%E3%81%8B%E3%82%89%E9%81%A9%E5%88%87%E3%81%8B%E3%81%A4%E6%9C%89%E5%8A%B9%E3%81%AA%E5%BF%9C%E7%AD%94%E3%82%92%E5%BE%97%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%3CBR%20%2F%3E%3CBR%20%2F%3E%E7%A7%81%E3%81%8C%E6%9B%B8%E3%81%84%E3%81%9F%20CAPL%20%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%3A%3C%2FP%3E%3CP%3E%2F*%40!%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%3A1252*%2F%3C%2FP%3E%3CP%3E%E5%A4%89%E6%95%B0%3CBR%20%2F%3E%7B%3CBR%20%2F%3E%20%2F*%20IO%E3%83%90%E3%83%83%E3%83%95%E3%82%A1%E3%80%81%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC%20*%2F%3CBR%20%2F%3E%E3%83%90%E3%82%A4%E3%83%88txBuffer%5B2%5D%3B%3CBR%20%2F%3E%20msTimer%20tMain%E3%80%81tSpi%E3%80%81tDelay%3B%3C%2FP%3E%3CP%3E%2F*%20%E3%83%A1%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%86%E3%83%BC%E3%83%88%E3%83%9E%E3%82%B7%E3%83%B3%20*%2F%3CBR%20%2F%3E%20int%20mainState%20%3D%200%3B%3CBR%20%2F%3E%E5%8D%98%E8%AA%9E%20curFrame%3B%3CBR%20%2F%3E%20int%20intAsserted%E3%80%81b_INTF%3B%3CBR%20%2F%3E%E6%95%B4%E6%95%B0%20s4%E3%80%81s3%E3%80%81s2%E3%80%81s1%E3%80%81s0%3B%3C%2FP%3E%3CP%3E%2F*%20SPI%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B6%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E7%94%A8%E3%81%AE%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%ADFSM%20*%2F%3CBR%20%2F%3E%20enum%20Spiop%20%7BOP_NONE%20%3D%200%E3%80%81OP_RD%3D1%E3%80%81OP_WR%3D2%7D%3B%3CBR%20%2F%3E%20enum%20Spisub%20%7BIDLE%3D0%2C%20TX1%3D10%2C%20RX1%3D11%2C%20TX2%3D12%2C%20RX2%3D13%7D%3B%3CBR%20%2F%3E%20int%20tr_op%20%E3%80%81%20spiSub%3B%3C%2FP%3E%3CP%3E%E3%83%AF%E3%83%BC%E3%83%89%20tr_addr%20%3D%200%3B%3CBR%20%2F%3E%E3%83%90%E3%82%A4%E3%83%88%20tr_wdata%20%3D%200%3B%3CBR%20%2F%3E%E3%83%90%E3%82%A4%E3%83%88%20tr_rdata%20%3D%200%3B%3CBR%20%2F%3E%20int%20tr_retry%20%3D%200%3B%20%2F%2F%20%E5%88%B6%E9%99%90%E3%81%95%E3%82%8C%E3%81%9F%E5%86%8D%E8%A9%A6%E8%A1%8C%E5%9B%9E%E6%95%B0%EF%BC%88%E9%9A%9C%E5%AE%B3%EF%BC%89%3CBR%20%2F%3E%20int%20needDummy%20%3D%201%3B%20%2F%2F%20WAKE%2FCS%E3%82%B0%E3%83%AA%E3%83%83%E3%83%81%E3%81%BE%E3%81%9F%E3%81%AF%E6%A4%9C%E5%87%BA%E3%81%95%E3%82%8C%E3%81%9F%E9%9A%9C%E5%AE%B3%E3%81%AE%E5%BE%8C%3C%2FP%3E%3CP%3E%2F*%20SPI%E3%83%AC%E3%82%B9%E3%83%9D%E3%83%B3%E3%82%B9%20*%2F%3CBR%20%2F%3E%E3%83%90%E3%82%A4%E3%83%88%20misoHi%20%3D%200%E3%80%81misoLo%20%3D%200%3B%3CBR%20%2F%3E%E3%83%AF%E3%83%BC%E3%83%89spiResp%20%3D%200%3B%3C%2FP%3E%3CP%3E%2F*%20%E3%82%AD%E3%83%A3%E3%83%83%E3%82%B7%E3%83%A5%E3%81%95%E3%82%8C%E3%81%9F%E3%83%AC%E3%82%B8%E3%82%B9%E3%82%BF%EF%BC%88%E3%83%A9%E3%82%A4%E3%83%96%E3%83%9F%E3%83%A9%E3%83%BC%EF%BC%89*%2F%3CBR%20%2F%3E%E3%83%90%E3%82%A4%E3%83%88%20regSPIOPS%20%3D%200%3B%3CBR%20%2F%3E%E3%83%90%E3%82%A4%E3%83%88%20spiops_base%20%3D%200%3B%3CBR%20%2F%3E%20int%20spiops_base_valid%20%3D%200%3B%3C%2FP%3E%3CP%3E%2F*%20INT%E3%82%A8%E3%83%83%E3%82%B8%E8%87%AA%E5%8B%95%E6%A4%9C%E5%87%BA%20*%2F%3CBR%20%2F%3E%E6%9C%80%E5%BE%8C%E3%81%AEIntLevel%E3%82%92-1%E3%81%AB%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3CBR%20%2F%3E%20int%20%E3%82%A2%E3%82%A4%E3%83%89%E3%83%AB%3B%3CBR%20%2F%3E%20int%20active_IntPol%20%3D%200%3B%20%2F%2F%20INTTRIG%E3%81%AE%E3%83%93%E3%83%83%E3%83%885%3CBR%20%2F%3E%20int%20intLevel%20%3D%200%3B%3CBR%20%2F%3E%20int%20USE_READY_GATE%20%3D%201%3B%20%2F%2F%200%20-%20%E3%82%AA%E3%83%95%EF%BC%88%E3%83%87%E3%83%95%E3%82%A9%E3%83%AB%E3%83%88%EF%BC%89%E3%80%811%20-%20%E3%82%AA%E3%83%B3%EF%BC%88%E5%AE%9F%E9%9A%9B%E3%81%AEHW%EF%BC%89%3C%2FP%3E%3CP%3E%2F*%20%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B6%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%8C%E5%AE%89%E5%85%A8%E3%81%A7%E3%81%82%E3%82%8B%E5%A0%B4%E5%90%88%E3%80%81%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E3%81%AF%20READY%20%E3%82%92%E3%82%A2%E3%82%B5%E3%83%BC%E3%83%88%E3%81%97%E3%81%BE%E3%81%99%E3%80%82*%2F%3CBR%20%2F%3E%20int%20%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%E5%BE%85%E6%A9%9F%E5%AE%8C%E4%BA%86%20%3D%200%3B%3C%2FP%3E%3CP%3E%2F*%20%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3%3A%20%E6%9C%80%E5%BE%8C%E3%81%AB%E3%83%87%E3%82%B3%E3%83%BC%E3%83%89%E3%81%95%E3%82%8C%E3%81%9F%E3%83%95%E3%83%A9%E3%82%B0%20*%2F%3CBR%20%2F%3E%E3%83%90%E3%82%A4%E3%83%88%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%E3%80%81%E3%83%87%E3%83%BC%E3%82%BF%3B%3CBR%20%2F%3E%E3%83%AF%E3%83%BC%E3%83%89%20msb%E3%80%81lsb%E3%80%81msb_addr%E3%80%81lsb_addr%3B%3C%2FP%3E%3CP%3E%2F*%20%E3%83%AC%E3%82%B8%E3%82%B9%E3%82%BF%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%20*%2F%3CBR%20%2F%3E%E3%83%AF%E3%83%BC%E3%83%89%20ADDR_SPIOPS%20%3D%200x0038%3B%20%2F%2F%20%5B2%5D%3DCORE_TR_HOLD%E3%80%81%5B1%3A0%5D%3DFLASH_RANGE%3B%20%5B7%3A3%5D%20%E4%BA%88%E7%B4%84%E6%B8%88%E3%81%BF%3C%2FP%3E%3CP%3E%2F*%20%E3%83%95%E3%82%A1%E3%83%BC%E3%83%A0%E3%82%A6%E3%82%A7%E3%82%A2%2FHW%E6%B4%BE%E7%94%9F%2F%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6%EF%BC%88SPIOPS%E7%B5%8C%E7%94%B1%EF%BC%89*%2F%3CBR%20%2F%3E%20word%20ADDR_FW_DERIV%20%3D%200x0805%3B%20%2F%2F%20SPIOPS%20FLASH_RANGE%20%3D%3D%2000%20(0x04)%20%E3%81%AE%E5%A0%B4%E5%90%88%E3%81%AB%E6%9C%89%E5%8A%B9%3CBR%20%2F%3E%E3%83%AF%E3%83%BC%E3%83%89%20ADDR_FW_VER%20%3D%200x0804%3B%3CBR%20%2F%3E%20word%20ADDR_HW_DERIV%20%3D%200x1542%3B%20%2F%2F%20SPIOPS%20FLASH_RANGE%20%3D%3D%2011%20(0x07)%20%E3%81%AE%E5%A0%B4%E5%90%88%E3%81%AB%E6%9C%89%E5%8A%B9%3CBR%20%2F%3E%E3%83%AF%E3%83%BC%E3%83%89%20ADDR_HW_VER%20%3D%200x1543%3B%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3E%2F*%20SPI%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%93%E3%83%AB%E3%83%80%E3%83%BC%3CBR%20%2F%3Ep1%20%E3%81%AF%E3%83%93%E3%83%83%E3%83%88%20b15%20%EF%BD%9E%20b9%20%E3%82%92%E3%82%AB%E3%83%90%E3%83%BC%E3%81%97%E3%80%81p0%20%E3%81%AF%E3%83%93%E3%83%83%E3%83%88%20b8%20%EF%BD%9E%20b2%20%E3%82%92%E3%82%AB%E3%83%90%E3%83%BC%E3%81%97%E3%81%BE%E3%81%99%20(%E4%B8%A1%E6%96%B9%E3%81%A8%E3%82%82%E5%81%B6%E6%95%B0%E3%83%91%E3%83%AA%E3%83%86%E3%82%A3)%E3%80%82*%2F%3CBR%20%2F%3E%20%2F*%20NBP8S%E3%83%97%E3%83%AD%E3%83%88%E3%82%B3%E3%83%AB%E3%81%AB%E5%BE%93%E3%81%A3%E3%81%A616%E3%83%93%E3%83%83%E3%83%88%E3%81%AESPI%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%82%92%E6%A7%8B%E7%AF%89%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3CBR%20%2F%3E%20-%20%E3%83%93%E3%83%83%E3%83%8815%3A%20R%2FW%20(1%3D%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%81%BF%E3%80%810%3D%E8%AA%AD%E3%81%BF%E5%8F%96%E3%82%8A)%3CBR%20%2F%3E%20-%20%E3%83%93%E3%83%83%E3%83%8814..2%3A%20%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%2F%E3%83%87%E3%83%BC%E3%82%BF%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%3CBR%20%2F%3E-%20%E3%83%93%E3%83%83%E3%83%881..0%3A%20%E3%83%91%E3%83%AA%E3%83%86%E3%82%A3%E3%83%93%E3%83%83%E3%83%88%20(%E3%83%93%E3%83%83%E3%83%8815..9%E3%81%A8%E3%83%93%E3%83%83%E3%83%888..2%E3%81%AF%E5%81%B6%E6%95%B0%E3%83%91%E3%83%AA%E3%83%86%E3%82%A3)%20*%2F%3C%2FP%3E%3CP%3E%E3%83%AF%E3%83%BC%E3%83%89makeNbp8sFrame(int%20rw%2C%20%E3%83%AF%E3%83%BC%E3%83%89addr_or_data)%3CBR%20%2F%3E%20%7B%3CBR%20%2F%3E%E5%8D%98%E8%AA%9E%20f%20%3D%200%3B%3CBR%20%2F%3E%20int%20%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%971%E3%80%81%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%972%E3%80%81p1%E3%80%81p0%3B%3C%2FP%3E%3CP%3Eif%20(spiSub%20%3D%3D%20TX1)%20%7B%3CBR%20%2F%3E%20%2F*%20TX1%3A%20%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%2013%E3%83%93%E3%83%83%E3%83%88%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%20*%2F%3CBR%20%2F%3E%20f%20%3D%20((rw%20%26amp%3B%201)%20%26lt%3B%26lt%3B%2015)%20%7C%20((addr_or_data%20%26amp%3B%200x1FFF)%20%26lt%3B%26lt%3B%202)%3B%3C%2FP%3E%3CP%3E%7D%20%E3%81%9D%E3%82%8C%E4%BB%A5%E5%A4%96%20%7B%3CBR%20%2F%3E%20%2F*%20TX2%3A%20%E3%83%93%E3%83%83%E3%83%889..2%E3%81%AB%E3%83%87%E3%83%BC%E3%82%BF%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%81%BE%E3%81%9F%E3%81%AF%E3%83%80%E3%83%9F%E3%83%BC8%E3%83%93%E3%83%83%E3%83%88%E3%83%87%E3%83%BC%E3%82%BF%20*%2F%3CBR%20%2F%3E%20f%20%3D%20((rw%20%26amp%3B%201)%20%26lt%3B%26lt%3B%2015)%20%7C%20((addr_or_data%20%26amp%3B%200xFF)%20%26lt%3B%26lt%3B%202)%3B%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3Ewrite(%22%5BmakeFrame%5D%20RAW%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%EF%BC%88%E3%83%91%E3%83%AA%E3%83%86%E3%82%A3%E3%81%AA%E3%81%97%EF%BC%89%3D%200x%2504X%22%2C%20f)%3B%3C%2FP%3E%3CP%3E%2F*%20---%20%E3%82%A4%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3%E3%83%91%E3%83%AA%E3%83%86%E3%82%A3%E3%83%AD%E3%82%B8%E3%83%83%E3%82%AF%EF%BC%88computeParity%E3%81%A8%E5%90%8C%E3%81%98%E3%80%81countBits%E3%81%AA%E3%81%97%EF%BC%89%20---%20*%2F%3CBR%20%2F%3E%20group1%20%3D%20(f%20%26gt%3B%26gt%3B%209)%20%26amp%3B%200x7F%3B%20%2F%2F%20%E3%83%93%E3%83%83%E3%83%8815%EF%BD%9E9%3CBR%20%2F%3E%20group2%20%3D%20(f%20%26gt%3B%26gt%3B%202)%20%26amp%3B%200x7F%3B%20%2F%2F%20%E3%83%93%E3%83%83%E3%83%888..2%3C%2FP%3E%3CP%3E%2F%2F%20%E6%89%8B%E5%8B%95%E3%81%A71%E3%82%92%E6%95%B0%E3%81%88%E3%82%8B%3CBR%20%2F%3Ep1%20%3D%200%3B%20p0%20%3D%200%3B%3CBR%20%2F%3E%20while%20(group1)%20%7B%20if%20(group1%20%26amp%3B%201)%20p1%2B%2B%3B%20group1%20%26gt%3B%26gt%3B%3D%201%3B%20%7D%3CBR%20%2F%3E%20while%20(group2)%20%7B%20if%20(group2%20%26amp%3B%201)%20p0%2B%2B%3B%20group2%20%26gt%3B%26gt%3B%3D%201%3B%20%7D%3C%2FP%3E%3CP%3Ep1%20%3D%20(p1%20%26amp%3B%201)%20%3B%20%2F%2F%20%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%971%E3%81%AE%E5%81%B6%E6%95%B0%E3%83%91%E3%83%AA%E3%83%86%E3%82%A3%3CBR%20%2F%3Ep0%20%3D%20(p0%20%26amp%3B%201)%20%3B%20%2F%2F%20%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%972%E3%81%AE%E5%81%B6%E6%95%B0%E3%83%91%E3%83%AA%E3%83%86%E3%82%A3%3C%2FP%3E%3CP%3Ef%20%26amp%3B%3D%200xFFFC%3B%20%2F%2F%20%E3%83%93%E3%83%83%E3%83%881%EF%BD%9E0%E3%82%92%E3%82%AF%E3%83%AA%E3%82%A2%3CBR%20%2F%3Ef%20%7C%3D%20((p1%20%26lt%3B%26lt%3B%201)%20%7C%20p0)%3B%20%2F%2F%20%E3%83%91%E3%83%AA%E3%83%86%E3%82%A3%E3%83%93%E3%83%83%E3%83%88%E3%82%92%E8%A8%AD%E5%AE%9A%3C%2FP%3E%3CP%3Ewrite(%22%5BmakeFrame%5D%20%E6%9C%80%E7%B5%82%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%20%3D%200x%2504X%22%2C%20f)%3B%3CBR%20%2F%3E%20f%20%E3%82%92%E8%BF%94%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3E%2F*%20%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%E3%81%A8%E9%9A%9C%E5%AE%B3%E3%81%AE%E3%83%AD%E3%82%B0%E8%A8%98%E9%8C%B2%20*%2F%3CBR%20%2F%3E%20void%20logSpiStatus(%E3%83%AF%E3%83%BC%E3%83%89r)%3CBR%20%2F%3E%20%7B%3CBR%20%2F%3E%20s4%20%3D%20(r%20%26gt%3B%26gt%3B%2014)%20%26amp%3B%201%3B%3CBR%20%2F%3E%20s3%20%3D%20(r%20%26gt%3B%26gt%3B%2013)%20%26amp%3B%201%3B%3CBR%20%2F%3E%20s2%20%3D%20(r%20%26gt%3B%26gt%3B%2012)%20%26amp%3B%201%3B%3CBR%20%2F%3E%20s1%20%3D%20(r%20%26gt%3B%26gt%3B%2011)%20%26amp%3B%201%3B%3CBR%20%2F%3E%20s0%20%3D%20(r%20%26gt%3B%26gt%3B%2010)%20%26amp%3B%201%3B%3C%2FP%3E%3CP%3E%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%20%3D%20(r%20%26gt%3B%26gt%3B%2010)%20%26amp%3B%200x1F%3B%3CBR%20%2F%3E%E3%83%87%E3%83%BC%E3%82%BF%20%3D%20(r%20%26gt%3B%26gt%3B%202)%20%26amp%3B%200xFF%3B%3C%2FP%3E%3CP%3Ewrite(%22%5BSPI%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%E3%83%93%E3%83%83%E3%83%88%5D%20s4%3D%25d%20s3%3D%25d%20s2%3D%25d%20s1%3D%25d%20s0%3D%25d%20%7C%20%E3%83%95%E3%83%AB%E3%83%AC%E3%82%B9%E3%83%9D%E3%83%B3%E3%82%B9%3D0x%2504X%22%2C%20s4%2C%20s3%2C%20s2%2C%20s1%2C%20s0%2C%20r)%3B%3CBR%20%2F%3E%20write(%22%5BSPI%20%E3%83%87%E3%82%B3%E3%83%BC%E3%83%89%E6%B8%88%E3%81%BF%5D%20%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%3D0x%2502X%20%E3%83%87%E3%83%BC%E3%82%BF%3D0x%2502X%22%2C%20%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%2C%20%E3%83%87%E3%83%BC%E3%82%BF)%3B%3C%2FP%3E%3CP%3Eif%20(s4)%20write(%22%E9%9A%9C%E5%AE%B3%3A%20%E4%BA%88%E7%B4%84%E6%B8%88%E3%81%BF%E3%81%AE%E9%9A%9C%E5%AE%B3%20(%E6%9C%AA%E5%AE%9A%E7%BE%A9)%22)%3B%3CBR%20%2F%3E%20if%20(s3)%20write(%22%E9%9A%9C%E5%AE%B3%3A%20%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%8C%E7%84%A1%E8%A6%96%E3%81%95%E3%82%8C%E3%81%9F%E3%81%8B%E3%80%81%E5%89%8D%E5%9B%9E%E3%81%AE%E8%AA%AD%E3%81%BF%E5%8F%96%E3%82%8A%E3%81%8C%E7%84%A1%E5%8A%B9%E3%81%A7%E3%81%99%22)%3B%3CBR%20%2F%3E%20if%20(s2)%20write(%22%E9%9A%9C%E5%AE%B3%3A%20%E3%82%AF%E3%83%AD%E3%83%83%E3%82%AF%E3%82%A8%E3%83%A9%E3%83%BC%22)%3B%3CBR%20%2F%3E%20if%20(s1)%20write(%22%E9%9A%9C%E5%AE%B3%3A%20%E3%83%91%E3%83%AA%E3%83%86%E3%82%A3%E3%82%A8%E3%83%A9%E3%83%BC%22)%3B%3CBR%20%2F%3E%20if%20(s0)%20write(%22%E9%9A%9C%E5%AE%B3%3A%20%E3%83%90%E3%82%B9%E7%AB%B6%E5%90%88%E3%81%BE%E3%81%9F%E3%81%AF%E4%B8%8D%E6%AD%A3%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%22)%3B%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3E%3CBR%20%2F%3E%2F*%20(s4..s0%20%E3%81%8C%E3%82%BC%E3%83%AD%E4%BB%A5%E5%A4%96%E3%81%AE%E5%A0%B4%E5%90%88%E3%81%AF%E5%95%8F%E9%A1%8C%E3%81%8C%E3%81%82%E3%82%8B%E3%81%93%E3%81%A8%E3%82%92%E7%A4%BA%E3%81%97%E3%81%BE%E3%81%99)%E3%80%82*%2F%3CBR%20%2F%3E%20int%20hasFault(%E5%8D%98%E8%AA%9E%20r)%3CBR%20%2F%3E%20%7B%3CBR%20%2F%3E%E6%88%BB%E3%82%8A%E5%80%A4%20(((r%20%26gt%3B%26gt%3B%2014)%20%26amp%3B%201)%20%7C%7C%20((r%20%26gt%3B%26gt%3B%2013)%20%26amp%3B%201)%20%7C%7C%20((r%20%26gt%3B%26gt%3B%2012)%20%26amp%3B%201)%20%7C%7C%20((r%20%26gt%3B%26gt%3B%2011)%20%26amp%3B%201)%20%7C%7C%20((r%20%26gt%3B%26gt%3B%2010)%20%26amp%3B%201))%3B%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3E%2F*%20MOSI%E3%81%AB16%E3%83%93%E3%83%83%E3%83%88%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%82%92%E3%82%AD%E3%83%A5%E3%83%BC%E3%82%A4%E3%83%B3%E3%82%B0%E3%81%99%E3%82%8B%EF%BC%88%E3%81%93%E3%81%93%E3%81%A7CS%E3%82%92%E3%83%AD%E3%83%BC%E3%83%AC%E3%83%99%E3%83%AB%E3%81%AB%E3%81%99%E3%82%8B%EF%BC%89*%2F%3C%2FP%3E%3CP%3E%3CBR%20%2F%3Evoid%20sendFrame(%E3%83%AF%E3%83%BC%E3%83%89%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A016)%3CBR%20%2F%3E%20%7B%3CBR%20%2F%3E%20txBuffer%5B0%5D%20%3D%20(%E3%83%90%E3%82%A4%E3%83%88)(%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A016%20%26gt%3B%26gt%3B%208)%3B%3CBR%20%2F%3E%20txBuffer%5B1%5D%20%3D%20(%E3%83%90%E3%82%A4%E3%83%88)(%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A016%20%26amp%3B%200xFF)%3B%3CBR%20%2F%3E%E3%82%BB%E3%83%B3%E3%82%B5%E3%82%AD%E3%83%A5%E3%83%BCMosiData(%22SENSOR%3A%3ASPI%3A%3AMaster_Port%3A%3ANBP_Sensor%22%2C%20txBuffer%2C%2016)%3B%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3E%2F*%20%E9%AB%98%E3%83%AC%E3%83%99%E3%83%AB%3A%20READ%2FWRITE%20%E6%93%8D%E4%BD%9C%E3%82%92%E3%82%B9%E3%82%B1%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%20*%2F%3C%2FP%3E%3CP%3Evoid%20spiReadByte(%E3%83%AF%E3%83%BC%E3%83%89%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9)%3CBR%20%2F%3E%20%7B%3CBR%20%2F%3E%20tr_addr%20%3D%20%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%3B%3CBR%20%2F%3E%20tr_op%20%3D%20OP_RD%3B%3CBR%20%2F%3E%20tr_retry%3D0%3B%3CBR%20%2F%3E%20spiSub%20%3D%20TX1%3B%3CBR%20%2F%3E%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%99(tSpi%2C%201)%3B%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3Evoid%20spiWriteByte(%E3%83%AF%E3%83%BC%E3%83%89%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%80%81%E3%83%90%E3%82%A4%E3%83%88%E3%83%87%E3%83%BC%E3%82%BF)%3CBR%20%2F%3E%20%7B%3CBR%20%2F%3E%20tr_addr%20%3D%20%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%3B%3CBR%20%2F%3E%20tr_wdata%20%3D%20%E3%83%87%E3%83%BC%E3%82%BF%3B%3CBR%20%2F%3E%20tr_op%20%3D%20OP_WR%3B%3CBR%20%2F%3E%20tr_retry%3D0%3B%3CBR%20%2F%3E%20spiSub%20%3D%20TX1%3B%3CBR%20%2F%3E%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%99(tSpi%2C%201)%3B%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3E%3CBR%20%2F%3E%2F*%20SPI%20%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%20FSM%20*%2F%3CBR%20%2F%3E%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BCtSpi%3CBR%20%2F%3E%20%7B%3CBR%20%2F%3E%E3%82%B9%E3%82%A4%E3%83%83%E3%83%81%EF%BC%88spiSub%EF%BC%89%3CBR%20%2F%3E%20%7B%3C%2FP%3E%3CP%3E%2F*%20TX1%20*%2F%3CBR%20%2F%3ECASE%20TX1%3A%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%20%3A%3AVT2710_1_DIO_Ch2%3A%3ADigitalOutput6%20%3D%200%20%3B%20%2F%2F%20CS%20%E4%BD%8E%3CBR%20%2F%3E%3CBR%20%2F%3EUSE_READY_GATE%20%26amp%3B%26amp%3B%20(tr_addr%20!%3D%20ADDR_SPIOPS)%20%E3%81%AE%E5%A0%B4%E5%90%88%3CBR%20%2F%3E%7B%3CBR%20%2F%3E%20intAsserted%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%20%26amp%3B%26amp%3B%20!intAsserted)%3CBR%20%2F%3E%7B%3CBR%20%2F%3Ewrite(%22%5BSPI%5D%20%E6%9C%80%E5%88%9D%E3%81%AETX1%E3%81%AE%E5%89%8D%E3%81%ABREADY%E3%82%92%E5%BE%85%E6%A9%9F%20-%20%E3%82%BB%E3%83%B3%E3%82%B5%E3%81%8C%E9%96%8B%E5%A7%8B%E3%81%95%E3%82%8C%E3%81%BE%E3%81%97%E3%81%9F%22)%3B%3CBR%20%2F%3E%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%99(tSpi%2C%201)%3B%3CBR%20%2F%3E%E5%A3%8A%E3%81%99%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%3F%201%20%3A%200%2C%20tr_addr)%3B%3C%2FP%3E%3CP%3Ewrite(%22%5BTX1%5D%20%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC%20--%26gt%3B%20%E3%82%BB%E3%83%B3%E3%82%B5%3A%20%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%20%3D%200x%2504X%20(R%2FW%3D%25d%20%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%3D0x%2504X)%22%2CcurFrame%2C%20(curFrame%20%26gt%3B%26gt%3B%2015)%20%26amp%3B%201%2C%20(curFrame%20%26gt%3B%26gt%3B%202)%20%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%3B%3C%2FP%3E%3CP%3E%2F*%20RX1%20(TX1%E3%81%AE%E5%BE%8C%E3%81%AER0)%20*%2F%3CBR%20%2F%3ECASE%20RX1%3A%3CBR%20%2F%3E%20misoHi%20%3D%20%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F149080%22%20target%3D%22_blank%22%3E%40sensor%3C%2FA%3E%20%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%20target%3D%22_blank%22%3E%40sensor%3C%2FA%3E%20%3A%3ASPI%3A%3AMaster_Port%3A%3ANBP_Sensor%3A%3AFrame1.MISO_Signals.MISO_Low_byte%3B%3CBR%20%2F%3E%20spiResp%20%3D%20((%E5%8D%98%E8%AA%9E)misoHi%20%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%20%E3%81%BF%E3%81%9D%E3%83%AD%3B%3CBR%20%2F%3E%20write(%22%5BRX1%5D%20%E3%82%BB%E3%83%B3%E3%82%B5%20--%26gt%3B%20%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC%3A%20%E5%BF%9C%E7%AD%94%20%3D%200x%2504X%20(%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%3D0x%2502X%20%E3%83%87%E3%83%BC%E3%82%BF%3D0x%2502X)%22%2CspiResp%2C%20(spiResp%20%26gt%3B%26gt%3B%2010)%20%26amp%3B%200x1F%2C%20(spiResp%20%26gt%3B%26gt%3B%202)%20%26amp%3B%200xFF)%3B%3CBR%20%2F%3E%20(%E3%83%80%E3%83%9F%E3%83%BC%E3%81%8C%E5%BF%85%E8%A6%81)%20%E3%81%AE%E5%A0%B4%E5%90%88%20%7B%3CBR%20%2F%3E%E3%83%80%E3%83%9F%E3%83%BC%E3%81%8C%E5%BF%85%E8%A6%81%20%3D%200%3B%3CBR%20%2F%3E%20spiSub%20%3D%20TX1%3B%3CBR%20%2F%3E%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%99(tSpi%2C%201)%3B%3CBR%20%2F%3E%E5%A3%8A%E3%81%99%3B%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3E%2F%2F%20%E6%AD%A3%E3%81%97%E3%81%84%E9%9A%9C%E5%AE%B3%E5%87%A6%E7%90%86%3CBR%20%2F%3EspiResp%20%E3%81%AE%E3%83%AD%E3%82%B0%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3CBR%20%2F%3E%20if(tr_addr%20!%3D%20ADDR_SPIOPS)%3CBR%20%2F%3E%20%7B%3CBR%20%2F%3E%20s4%20%3D%20(spiResp%20%26gt%3B%26gt%3B%2014)%20%26amp%3B%201%3B%3CBR%20%2F%3E%20s3%20%3D%20(spiResp%20%26gt%3B%26gt%3B%2013)%20%26amp%3B%201%3B%3CBR%20%2F%3E%20s2%20%3D%20(spiResp%20%26gt%3B%26gt%3B%2012)%20%26amp%3B%201%3B%3CBR%20%2F%3E%20s1%20%3D%20(spiResp%20%26gt%3B%26gt%3B%2011)%20%26amp%3B%201%3B%3CBR%20%2F%3E%20s0%20%3D%20(spiResp%20%26gt%3B%26gt%3B%2010)%20%26amp%3B%201%3B%3C%2FP%3E%3CP%3Eif%20(s2)%20%7B%20%2F%2F%20%E3%82%AF%E3%83%AD%E3%83%83%E3%82%AF%E9%9A%9C%E5%AE%B3%3CBR%20%2F%3E%EF%BC%88tr_retry%20%26lt%3B%204%EF%BC%89%E3%81%AE%E5%A0%B4%E5%90%88%20%7B%3CBR%20%2F%3E%20write(%22%5BSPI%5D%20%E3%82%AF%E3%83%AD%E3%83%83%E3%82%AF%E9%9A%9C%E5%AE%B3%3A%20%E3%83%80%E3%83%9F%E3%83%BC%2B%E5%86%8D%E8%A9%A6%E8%A1%8C%22)%3B%3CBR%20%2F%3E%E3%83%80%E3%83%9F%E3%83%BC%E3%81%8C%E5%BF%85%E8%A6%81%20%3D%201%3B%20tr_retry%2B%2B%3B%3CBR%20%2F%3E%20spiSub%20%3D%20TX1%3B%20setTimer(tSpi%2C%205)%3B%3CBR%20%2F%3E%E5%A3%8A%E3%81%99%3B%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3Etr_op%20%3D%20OP_NONE%3B%3CBR%20%2F%3E%20spiSub%20%3D%20%E3%82%A2%E3%82%A4%E3%83%89%E3%83%AB%3B%3CBR%20%2F%3E%E5%A3%8A%E3%81%99%3B%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3E%E3%82%82%E3%81%97%20(s3%20%7C%7C%20s4)%20%7B%3CBR%20%2F%3E%20write(%22%5BSPI%5D%20%E8%87%B4%E5%91%BD%E7%9A%84%E3%81%AA%E9%9A%9C%E5%AE%B3%20(%E4%BA%88%E7%B4%84%E6%B8%88%E3%81%BF%2F%E5%89%8D%E5%9B%9E%E3%81%AE%E8%AA%AD%E3%81%BF%E5%8F%96%E3%82%8A%2F%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%81%BF)%20%E3%82%A8%E3%83%A9%E3%83%BC%E3%80%81%E8%BB%A2%E9%80%81%E3%82%92%E4%B8%AD%E6%AD%A2%E3%81%97%E3%81%BE%E3%81%99%22)%3B%3C%2FP%3E%3CP%3Etr_op%20%3D%20OP_NONE%3B%3CBR%20%2F%3E%20spiSub%20%3D%20%E3%82%A2%E3%82%A4%E3%83%89%E3%83%AB%3B%3CBR%20%2F%3E%E5%A3%8A%E3%81%99%3B%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3E%E3%82%82%E3%81%97%20(s1%20%7C%7C%20s0)%20%7B%3CBR%20%2F%3E%20%EF%BC%88tr_retry%20%26lt%3B%204%EF%BC%89%E3%81%AE%E5%A0%B4%E5%90%88%20%7B%3CBR%20%2F%3E%20write(%22%5BSPI%5D%20SPI%E9%9A%9C%E5%AE%B3(s1%2Fs0)%3A%20%E3%83%80%E3%83%9F%E3%83%BC%2B%E5%86%8D%E8%A9%A6%E8%A1%8C%22)%3B%3CBR%20%2F%3E%E3%83%80%E3%83%9F%E3%83%BC%E3%81%8C%E5%BF%85%E8%A6%81%20%3D%201%3B%3CBR%20%2F%3E%20tr_retry%2B%2B%3B%3CBR%20%2F%3E%20spiSub%20%3D%20TX1%3B%3CBR%20%2F%3E%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%99(tSpi%2C%201)%3B%3CBR%20%2F%3E%E5%A3%8A%E3%81%99%3B%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3Etr_op%20%3D%20OP_NONE%3B%3CBR%20%2F%3E%20spiSub%20%3D%20%E3%82%A2%E3%82%A4%E3%83%89%E3%83%AB%3B%3CBR%20%2F%3E%E5%A3%8A%E3%81%99%3B%3CBR%20%2F%3E%20%7D%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3Eif%20(tr_op%20%3D%3D%20OP_WR)%20%7B%3CBR%20%2F%3E%20curFrame%20%3D%20makeNbp8sFrame(1%2C%20tr_wdata)%3B%3CBR%20%2F%3E%20write(%22%5BTX2%5D%20%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC%20--%26gt%3B%20%E3%82%BB%E3%83%B3%E3%82%B5%3A%20%E3%83%87%E3%83%BC%E3%82%BF%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%20%3D%200x%2504X%22%2C%20curFrame)%3B%3CBR%20%2F%3E%20sendFrame(%E7%8F%BE%E5%9C%A8%E3%81%AE%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0)%E3%80%82%3CBR%20%2F%3E%20spiSub%20%3D%20RX2%3B%3CBR%20%2F%3E%20setTimer(tSpi%2C%205)%3B%3CBR%20%2F%3E%E5%A3%8A%E3%81%99%3B%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3E%2F*%20READ%E3%81%AE%E5%A0%B4%E5%90%88%E3%81%AF%E3%83%80%E3%83%9F%E3%83%BC%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%82%92%E9%80%81%E4%BF%A1%E3%81%97%E3%81%BE%E3%81%99%20*%2F%3CBR%20%2F%3E%E3%81%9D%E3%81%86%E3%81%A7%E3%81%AA%E3%81%84%E5%A0%B4%E5%90%88%20(tr_op%20%3D%3D%20OP_RD)%20%7B%3CBR%20%2F%3E%20curFrame%20%3D%20makeNbp8sFrame(0%2C%200x0000)%3B%3CBR%20%2F%3E%20write(%22%5BTX2%5D%20%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC%20--%26gt%3B%20%E3%82%BB%E3%83%B3%E3%82%B5%3A%20%E3%83%80%E3%83%9F%E3%83%BC%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%20%3D%200x%2504X%22%2C%20curFrame)%3B%3CBR%20%2F%3E%20sendFrame(%E7%8F%BE%E5%9C%A8%E3%81%AE%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0)%E3%80%82%3CBR%20%2F%3E%20spiSub%20%3D%20RX2%3B%3CBR%20%2F%3E%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%99(tSpi%2C%201)%3B%3CBR%20%2F%3E%E5%A3%8A%E3%81%99%3B%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3E%2F*%20TX2%20*%2F%3CBR%20%2F%3ECASE%20TX2%3A%3CBR%20%2F%3E%20spiSub%20%3D%20RX2%3B%3CBR%20%2F%3E%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%99(tSpi%2C%201)%3B%3CBR%20%2F%3E%E5%A3%8A%E3%81%99%3B%3C%2FP%3E%3CP%3E%2F*%20RX2%20(R1%3A%20%E8%AA%AD%E3%81%BF%E5%8F%96%E3%82%8A%E3%81%AE%E5%A0%B4%E5%90%88%E3%81%AFDATA%E3%80%81%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%81%BF%E3%81%AE%E5%A0%B4%E5%90%88%E3%81%AFSTATUS)%20*%2F%3CBR%20%2F%3ECASE%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%20target%3D%22_blank%22%3E%40sensor%3C%2FA%3E%20%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%20target%3D%22_blank%22%3E%40sensor%3C%2FA%3E%20%3A%3ASPI%3A%3AMaster_Port%3A%3ANBP_Sensor%3A%3AFrame1.MISO_Signals.MISO_Low_byte%3B%3CBR%20%2F%3E%20spiResp%20%3D%20((%E5%8D%98%E8%AA%9E)misoHi%20%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%20%E3%81%BF%E3%81%9D%E3%83%AD%3B%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%40VTS%3C%2FA%3E%20%3A%3AVT2710_1_DIO_Ch2%3A%3ADigitalOutput6%20%3D%201%20%3B%20%2F%2F%20CS%20%E3%83%8F%E3%82%A4%3CBR%20%2F%3E%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%99(tDelay%2C%2010)%3B%3CBR%20%2F%3E%20write(%22%5BRX2%5D%20%E3%82%BB%E3%83%B3%E3%82%B5%20--%26gt%3B%20%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC%3A%20%E5%BF%9C%E7%AD%94%20%3D%200x%2504X%20(%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%3D0x%2502X%20%E3%83%87%E3%83%BC%E3%82%BF%3D0x%2502X)%22%2CspiResp%2C%20(spiResp%20%26gt%3B%26gt%3B%2010)%20%26amp%3B%200x1F%2C%20(spiResp%20%26gt%3B%26gt%3B%202)%20%26amp%3B%200xFF)%3B%3C%2FP%3E%3CP%3ElogSpiStatus(spiResp)%3B%20%2F%2F%20%E6%AD%A3%E3%81%97%E3%81%84%E9%9A%9C%E5%AE%B3%E5%87%A6%E7%90%86%20*%2F%3CBR%20%2F%3E%20if(tr_addr%20!%3D%20ADDR_SPIOPS)%3CBR%20%2F%3E%20%7B%3CBR%20%2F%3E%20s4%20%3D%20(spiResp%20%26gt%3B%26gt%3B%2014)%20%26amp%3B%201%3B%3CBR%20%2F%3E%20s3%20%3D%20(spiResp%20%26gt%3B%26gt%3B%2013)%20%26amp%3B%201%3B%3CBR%20%2F%3E%20s2%20%3D%20(spiResp%20%26gt%3B%26gt%3B%2012)%20%26amp%3B%201%3B%3CBR%20%2F%3E%20s1%20%3D%20(spiResp%20%26gt%3B%26gt%3B%2011)%20%26amp%3B%201%3B%3CBR%20%2F%3E%20s0%20%3D%20(spiResp%20%26gt%3B%26gt%3B%2010)%20%26amp%3B%201%3B%3C%2FP%3E%3CP%3Eif%20(s2)%20%7B%20%2F%2F%20%E3%82%AF%E3%83%AD%E3%83%83%E3%82%AF%E9%9A%9C%E5%AE%B3%3CBR%20%2F%3E%EF%BC%88tr_retry%20%26lt%3B%204%EF%BC%89%E3%81%AE%E5%A0%B4%E5%90%88%20%7B%3CBR%20%2F%3E%20write(%22%5BSPI%5D%20%E3%82%AF%E3%83%AD%E3%83%83%E3%82%AF%E9%9A%9C%E5%AE%B3%3A%20%E3%83%80%E3%83%9F%E3%83%BC%2B%E5%86%8D%E8%A9%A6%E8%A1%8C%22)%3B%3CBR%20%2F%3E%E3%83%80%E3%83%9F%E3%83%BC%E3%81%8C%E5%BF%85%E8%A6%81%20%3D%201%3B%3CBR%20%2F%3E%20tr_retry%2B%2B%3B%3CBR%20%2F%3E%20spiSub%20%3D%20TX1%3B%3CBR%20%2F%3E%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%99(tSpi%2C%201)%3B%3CBR%20%2F%3E%E5%A3%8A%E3%81%99%3B%3CBR%20%2F%3E%20%7D%3CBR%20%2F%3E%20tr_op%20%3D%20OP_NONE%3B%3CBR%20%2F%3E%20spiSub%20%3D%20%E3%82%A2%E3%82%A4%E3%83%89%E3%83%AB%3B%3CBR%20%2F%3E%E5%A3%8A%E3%81%99%3B%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3E%E3%82%82%E3%81%97%20(s3%20%7C%7C%20s4)%20%7B%3CBR%20%2F%3E%20write(%22%5BSPI%5D%20%E8%87%B4%E5%91%BD%E7%9A%84%E3%81%AA%E9%9A%9C%E5%AE%B3%20(%E3%83%91%E3%83%AA%E3%83%86%E3%82%A3%2F%E7%AB%B6%E5%90%88)%E3%80%81%E8%BB%A2%E9%80%81%E3%82%92%E4%B8%AD%E6%AD%A2%E3%81%97%E3%81%BE%E3%81%99%22)%3B%3CBR%20%2F%3E%20tr_op%20%3D%20OP_NONE%3B%3CBR%20%2F%3E%20spiSub%20%3D%20%E3%82%A2%E3%82%A4%E3%83%89%E3%83%AB%3B%3CBR%20%2F%3E%E5%A3%8A%E3%81%99%3B%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3E%E3%82%82%E3%81%97%20(s1%20%7C%7C%20s0)%20%7B%3CBR%20%2F%3E%20%EF%BC%88tr_retry%20%26lt%3B%204%EF%BC%89%E3%81%AE%E5%A0%B4%E5%90%88%20%7B%3CBR%20%2F%3E%20write(%22%5BSPI%5D%20SPI%E9%9A%9C%E5%AE%B3(s1%2Fs0)%3A%20%E3%83%80%E3%83%9F%E3%83%BC%2B%E5%86%8D%E8%A9%A6%E8%A1%8C%22)%3B%3CBR%20%2F%3E%E3%83%80%E3%83%9F%E3%83%BC%E3%81%8C%E5%BF%85%E8%A6%81%20%3D%201%3B%3CBR%20%2F%3E%20tr_retry%2B%2B%3B%3CBR%20%2F%3E%20spiSub%20%3D%20TX1%3B%3CBR%20%2F%3E%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%99(tSpi%2C%201)%3B%3CBR%20%2F%3E%E5%A3%8A%E3%81%99%3B%3CBR%20%2F%3E%20%7D%3CBR%20%2F%3E%20tr_op%20%3D%20OP_NONE%3B%3CBR%20%2F%3E%20spiSub%20%3D%20%E3%82%A2%E3%82%A4%E3%83%89%E3%83%AB%3B%3CBR%20%2F%3E%E5%A3%8A%E3%81%99%3B%3CBR%20%2F%3E%20%7D%3CBR%20%2F%3E%20%7D%3CBR%20%2F%3E%20(tr_op%20%3D%3D%20OP_RD)%20%E3%81%AE%E5%A0%B4%E5%90%88%3CBR%20%2F%3Etr_rdata%20%3D%20(spiResp%20%26gt%3B%26gt%3B%202)%20%26amp%3B%200xFF%3B%3C%2FP%3E%3CP%3Etr_op%20%3D%20OP_NONE%3B%3CBR%20%2F%3E%20spiSub%20%3D%20%E3%82%A2%E3%82%A4%E3%83%89%E3%83%AB%3B%3CBR%20%2F%3E%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%99(tDelay%2C%201)%3B%3CBR%20%2F%3E%E5%A3%8A%E3%81%99%3B%3CBR%20%2F%3E%20%7D%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3E%2F*%20%E3%83%A6%E3%83%BC%E3%83%86%E3%82%A3%E3%83%AA%E3%83%86%E3%82%A3%20*%2F%3CBR%20%2F%3E%20int%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%A7%8B%E3%82%81%E3%82%8B%20*%2F%3CBR%20%2F%3E%E9%96%8B%E5%A7%8B%E6%99%82%E3%81%AB%3CBR%20%2F%3E%7B%3CBR%20%2F%3E%20write(%22NBP8s%20%E8%A9%95%E4%BE%A1%22)%3B%3CBR%20%2F%3E%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%99(tDelay%2C38)%3B%3C%2FP%3E%3CP%3EneedDummy%20%3D%201%3B%20%2F*%20WAKE%2FCS%E3%82%B0%E3%83%AA%E3%83%83%E3%83%81%E5%BE%8C%E3%81%AE%E6%9C%80%E5%88%9D%E3%81%AE%E8%BB%A2%E9%80%81%E3%83%80%E3%83%9F%E3%83%BC%20*%2F%3CBR%20%2F%3E%E3%83%A1%E3%82%A4%E3%83%B3%E7%8A%B6%E6%85%8B%20%3D%200%3B%3CBR%20%2F%3E%20tr_op%20%3D%20OP_NONE%3B%3CBR%20%2F%3E%20spiSub%20%3D%20%E3%82%A2%E3%82%A4%E3%83%89%E3%83%AB%3B%3CBR%20%2F%3E%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%E5%BE%85%E6%A9%9F%E5%AE%8C%E4%BA%86%20%3D%201%3B%3CBR%20%2F%3E%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%99(tMain%E3%80%8135)%3B%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3E%2F*%20tDelay%20%E3%81%AF%20main%20%E3%81%AB%E6%88%BB%E3%82%8A%E3%81%BE%E3%81%99%20*%2F%3CBR%20%2F%3E%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC%20tDelay%3CBR%20%2F%3E%20%7B%3CBR%20%2F%3E%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%99(tMain%E3%80%815)%3B%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3E%2F*%20%E3%83%A1%E3%82%A4%E3%83%B3FSM%20*%2F%3CBR%20%2F%3E%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BCtMain%3CBR%20%2F%3E%20%7B%3CBR%20%2F%3E%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%99(tMain%E3%80%811)%3B%3CBR%20%2F%3E%3CBR%20%2F%3E%20%2F*%20%E3%82%B9%E3%83%86%E3%83%BC%E3%83%88%E3%83%9E%E3%82%B7%E3%83%B3%20*%2F%3CBR%20%2F%3E%E3%82%B9%E3%82%A4%E3%83%83%E3%83%81%EF%BC%88%E3%83%A1%E3%82%A4%E3%83%B3%E7%8A%B6%E6%85%8B%EF%BC%89%3CBR%20%2F%3E%20%7B%3CBR%20%2F%3E%20%2F*%20SPIOPS%E3%83%8F%E3%83%B3%E3%83%89%E3%82%B7%E3%82%A7%E3%82%A4%E3%82%AF%20*%2F%3CBR%20%2F%3ECASE%200%3A%3CBR%20%2F%3E%20spiBusy()%20%E3%81%AE%E5%A0%B4%E5%90%88%E3%80%81%E3%83%96%E3%83%AC%E3%83%BC%E3%82%AF%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3CBR%20%2F%3E%20%2F%2F%20%E3%83%80%E3%83%9F%E3%83%BC%E3%81%8C%E4%BF%9D%E7%95%99%E4%B8%AD%E3%81%AE%E5%A0%B4%E5%90%88%EF%BC%88%E3%83%AA%E3%82%BB%E3%83%83%E3%83%88%2F%E9%9A%9C%E5%AE%B3%E5%BE%8C%E3%81%AA%E3%81%A9%EF%BC%89%E3%80%81%E3%81%9D%E3%82%8C%E3%82%92%E6%B6%88%E8%B2%BB%E3%81%97%E3%81%BE%E3%81%99%3CBR%20%2F%3Ewrite(%22SPIOPS%20-%20%E8%B5%B7%E5%8B%95%E3%82%92%E3%82%AF%E3%83%AA%E3%82%A2%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E3%83%80%E3%83%9F%E3%83%BC%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%22)%3B%3C%2FP%3E%3CP%3E%2F%2F%20%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%20%3A%3AVT2710_1_DIO_Ch2%3A%3ADigitalOutput6%20%3D%200%3B%20%2F%2F%20CS%20%E4%BD%8E%3CBR%20%2F%3E%2F%2F%20%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%99(tDelay%2C%202)%3B%3CBR%20%2F%3E%20%2F%2F%20%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%20%3A%3AVT2710_1_DIO_Ch2%3A%3ADigitalOutput6%20%3D%201%3B%20%2F%2F%20CS%20%E3%83%8F%E3%82%A4%3CBR%20%2F%3E%2F%2F%20%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%99(tDelay%2C%205)%3B%3CBR%20%2F%3E%3CBR%20%2F%3E%20spiReadByte(0x0000)%3B%20%2F%2F%20%E3%83%80%E3%83%9F%E3%83%BC%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%EF%BC%88%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E3%81%AB%E3%82%88%E3%81%A3%E3%81%A6%E7%84%A1%E8%A6%96%E3%81%95%E3%82%8C%E3%82%8B%EF%BC%89%3CBR%20%2F%3E%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%99(tDelay%2C5)%3B%3C%2FP%3E%3CP%3E%E3%83%80%E3%83%9F%E3%83%BC%E3%81%8C%E5%BF%85%E8%A6%81%20%3D%200%3B%3CBR%20%2F%3E%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%99(tDelay%2C5)%3B%3CBR%20%2F%3E%E3%83%A1%E3%82%A4%E3%83%B3%E7%8A%B6%E6%85%8B%20%3D%201%3B%3CBR%20%2F%3E%E5%A3%8A%E3%81%99%3B%3C%2FP%3E%3CP%3ECASE%201%3A%3CBR%20%2F%3EspiBusy()%20%E3%81%AE%E5%A0%B4%E5%90%88%E3%80%81%E3%83%96%E3%83%AC%E3%83%BC%E3%82%AF%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3CBR%20%2F%3Ewrite(%22SPIOPS%20-%20SENSOR%20%E6%BA%96%E5%82%99%E5%AE%8C%E4%BA%86%E3%80%81%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%81%BF%E5%87%A6%E7%90%86%E4%B8%AD%22)%3B%3CBR%20%2F%3EspiWriteByte(ADDR_SPIOPS%2C%200x04)%3B%20%2F%2F%20SPIOPS%20%3D%200x04%E3%82%92%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%82%80%3CBR%20%2F%3E%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%99(tDelay%2C5)%3B%3CBR%20%2F%3E%E3%83%A1%E3%82%A4%E3%83%B3%E7%8A%B6%E6%85%8B%20%3D%202%3B%3CBR%20%2F%3E%E5%A3%8A%E3%81%99%3B%3C%2FP%3E%3CP%3E%E3%82%B1%E3%83%BC%E3%82%B92%3A%3CBR%20%2F%3E%20spiBusy()%20%E3%81%AE%E5%A0%B4%E5%90%88%E3%80%81%E3%83%96%E3%83%AC%E3%83%BC%E3%82%AF%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3CBR%20%2F%3E%20spiReadByte(ADDR_SPIOPS)%3B%20%2F%2F%20SPIOPS%E3%82%92%E8%AA%AD%E3%81%BF%E6%88%BB%E3%81%99%3CBR%20%2F%3E%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%99(tDelay%2C%205)%3B%3CBR%20%2F%3E%E3%83%A1%E3%82%A4%E3%83%B3%E7%8A%B6%E6%85%8B%20%3D%203%3B%3CBR%20%2F%3E%E5%A3%8A%E3%81%99%3B%3C%2FP%3E%3CP%3E%E3%82%B1%E3%83%BC%E3%82%B93%3A%3CBR%20%2F%3E%20spiBusy()%20%E3%81%AE%E5%A0%B4%E5%90%88%E3%80%81%E3%83%96%E3%83%AC%E3%83%BC%E3%82%AF%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3CBR%20%2F%3E%E3%83%A1%E3%82%A4%E3%83%B3%E7%8A%B6%E6%85%8B%20%3D%204%3B%3CBR%20%2F%3E%E5%A3%8A%E3%81%99%3B%3C%2FP%3E%3CP%3E%E3%82%B1%E3%83%BC%E3%82%B94%3A%3CBR%20%2F%3E%20spiBusy()%20%E3%81%AE%E5%A0%B4%E5%90%88%E3%80%81%E3%83%96%E3%83%AC%E3%83%BC%E3%82%AF%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%3CP%3E%2F%2F%20spiResp%E3%83%93%E3%83%83%E3%83%88%E3%81%AE%E4%BB%A3%E3%82%8F%E3%82%8A%E3%81%ABtr_rdata%EF%BC%88%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A3%E3%81%95%E3%82%8C%E3%81%9F%E3%83%90%E3%82%A4%E3%83%88%EF%BC%89%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%3CBR%20%2F%3EregSPIOPS%20%3D%20(%E3%83%90%E3%82%A4%E3%83%88)(tr_rdata%20%26amp%3B%200x07)%3B%3C%2FP%3E%3CP%3E%2F%2F%20HOLD%E3%81%8C%E3%82%A2%E3%82%AF%E3%83%86%E3%82%A3%E3%83%96%E3%81%A7%E7%AF%84%E5%9B%B2%E3%81%8C00%E3%81%AE%E5%A0%B4%E5%90%88%20-%26gt%3B%20SPIOPS%E3%81%AF0x04%E3%81%A7%E3%81%82%E3%82%8B%E5%BF%85%E8%A6%81%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%3CBR%20%2F%3E%EF%BC%88regSPIOPS%20%3D%3D%200x04%EF%BC%89%E3%81%AE%E5%A0%B4%E5%90%88%20%7B%3CBR%20%2F%3E%20write(%22SPIOPS%3A%20SET%20OK%20(0x%2502X)%22%2C%20regSPIOPS)%3B%3CBR%20%2F%3E%20mainState%20%3D%2010%3B%20%2F%2F%20FW%2FHW%E8%AA%AD%E3%81%BF%E5%8F%96%E3%82%8A%E3%81%B8%3CBR%20%2F%3E%7D%3CBR%20%2F%3E%E3%81%9D%E3%82%8C%E4%BB%A5%E5%A4%96%20%7B%3CBR%20%2F%3E%20write(%22SPIOPS%20NOT%20READY%20(SPIOPS%20%3D%200x%2502X)%20--%26gt%3B%20%E5%86%8D%E8%A9%A6%E8%A1%8C%E4%B8%AD%22%2C%20regSPIOPS)%3B%3CBR%20%2F%3E%E3%83%80%E3%83%9F%E3%83%BC%E3%81%8C%E5%BF%85%E8%A6%81%20%3D%201%3B%3CBR%20%2F%3E%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%99(tDelay%2C5)%3B%3CBR%20%2F%3E%E3%83%A1%E3%82%A4%E3%83%B3%E7%8A%B6%E6%85%8B%20%3D%201%20%3B%3CBR%20%2F%3E%20%7D%3CBR%20%2F%3E%E5%A3%8A%E3%81%99%3B%3C%2FP%3E%3CP%3E%2F*%20FW%20%2F%20HW%20%E8%AA%AD%E3%81%BF%E5%8F%96%E3%82%8A%E3%82%B7%E3%83%BC%E3%82%B1%E3%83%B3%E3%82%B9%20*%2F%3CBR%20%2F%3ECASE%2010%3A%3CBR%20%2F%3E%20spiBusy()%20%E3%81%AE%E5%A0%B4%E5%90%88%E3%80%81%E3%83%96%E3%83%AC%E3%83%BC%E3%82%AF%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3CBR%20%2F%3E%20write(%22SPIOPS%20%E3%81%AF%E3%81%99%E3%81%A7%E3%81%AB%200x04%20%E3%81%AB%E8%A8%AD%E5%AE%9A%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%20--%26gt%3B%20%E3%83%95%E3%82%A1%E3%83%BC%E3%83%A0%E3%82%A6%E3%82%A7%E3%82%A2%20%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6%E3%81%8C%E3%82%A2%E3%82%AF%E3%83%86%E3%82%A3%E3%83%96%E3%81%A7%E3%81%99%22)%3B%3CBR%20%2F%3E%20write(%22FW_DERIV%20(0x0805)%20%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%82%93%E3%81%A7%E3%81%84%E3%81%BE%E3%81%99...%22)%3B%3CBR%20%2F%3E%20spiReadByte(ADDR_FW_DERIV)%3B%3CBR%20%2F%3E%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%99(tDelay%E3%80%815)%3B%3CBR%20%2F%3E%E3%83%A1%E3%82%A4%E3%83%B3%E7%8A%B6%E6%85%8B%20%3D%2011%3B%3CBR%20%2F%3E%E5%A3%8A%E3%81%99%3B%3C%2FP%3E%3CP%3ECASE%2011%3A%3CBR%20%2F%3E%20spiBusy()%20%E3%81%AE%E5%A0%B4%E5%90%88%E3%80%81%E3%83%96%E3%83%AC%E3%83%BC%E3%82%AF%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3CBR%20%2F%3E%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%81%BF(%22FW_DERIV%20%3D%200x%2502X%22%2C%20tr_rdata)%3B%3CBR%20%2F%3E%20write(%22FW_VER%20(0x0804)%20%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%82%93%E3%81%A7%E3%81%84%E3%81%BE%E3%81%99...%22)%3B%3CBR%20%2F%3E%20spiReadByte(ADDR_FW_VER)%3B%3CBR%20%2F%3E%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%99(tDelay%E3%80%815)%3B%3CBR%20%2F%3E%E3%83%A1%E3%82%A4%E3%83%B3%E7%8A%B6%E6%85%8B%20%3D%2012%3B%3CBR%20%2F%3E%E5%A3%8A%E3%81%99%3B%3C%2FP%3E%3CP%3ECASE%2012%3A%3CBR%20%2F%3E%20spiBusy()%20%E3%81%AE%E5%A0%B4%E5%90%88%E3%80%81%E3%83%96%E3%83%AC%E3%83%BC%E3%82%AF%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3CBR%20%2F%3E%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%81%BF(%22FW_VER%20%3D%200x%2502X%22%2C%20tr_rdata)%3B%3CBR%20%2F%3E%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%99(tDelay%E3%80%815)%3B%3CBR%20%2F%3E%E3%83%A1%E3%82%A4%E3%83%B3%E7%8A%B6%E6%85%8B%20%3D%2013%3B%3CBR%20%2F%3E%E5%A3%8A%E3%81%99%3B%3C%2FP%3E%3CP%3ECASE%2013%3A%3CBR%20%2F%3E%20spiBusy()%20%E3%81%AE%E5%A0%B4%E5%90%88%E3%80%81%E3%83%96%E3%83%AC%E3%83%BC%E3%82%AF%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3CBR%20%2F%3E%20write(%22NBP8s%20CPU%E3%82%92%E8%A7%A3%E6%94%BE%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%ABSPIOPS(0x0038)%E3%82%92%E3%82%AF%E3%83%AA%E3%82%A2%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%22)%3B%3CBR%20%2F%3E%20spiWriteByte(ADDR_SPIOPS%2C%200x00)%3B%3CBR%20%2F%3E%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%99(tDelay%E3%80%815)%3B%3CBR%20%2F%3E%E3%83%A1%E3%82%A4%E3%83%B3%E7%8A%B6%E6%85%8B%20%3D%2014%3B%3CBR%20%2F%3E%E5%A3%8A%E3%81%99%3B%3CBR%20%2F%3E%3CBR%20%2F%3ECASE%2014%3A%3CBR%20%2F%3E%20spiBusy()%20%E3%81%AE%E5%A0%B4%E5%90%88%E3%80%81%E3%83%96%E3%83%AC%E3%83%BC%E3%82%AF%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3CBR%20%2F%3E%20write(%22FW%20%E8%AA%AD%E3%81%BF%E5%8F%96%E3%82%8A%E5%AE%8C%E4%BA%86%22)%3B%3CBR%20%2F%3E%E3%83%A1%E3%82%A4%E3%83%B3%E7%8A%B6%E6%85%8B%20%3D%2099%3B%3CBR%20%2F%3E%E5%A3%8A%E3%81%99%3B%3C%2FP%3E%3CP%3ECASE%2099%3A%3CBR%20%2F%3E%20%2F%2F%20%E3%82%A2%E3%82%A4%E3%83%89%E3%83%AA%E3%83%B3%E3%82%B0%2F%E5%81%9C%E6%AD%A2%3CBR%20%2F%3E%E5%A3%8A%E3%81%99%3B%3CBR%20%2F%3E%20%7D%7D%3C%2FP%3E%3CP%3E%E3%81%82%E3%82%89%E3%82%86%E3%82%8B%E6%8F%90%E6%A1%88%E3%82%84%E3%83%95%E3%82%A3%E3%83%BC%E3%83%89%E3%83%90%E3%83%83%E3%82%AF%E3%81%AF%E3%80%81%E4%BB%8A%E5%BE%8C%E3%81%AE%E9%80%B2%E6%AD%A9%E3%81%AB%E5%BD%B9%E7%AB%8B%E3%81%A1%E3%81%BE%E3%81%99%E3%80%82%3CBR%20%2F%3E%3CBR%20%2F%3E%E3%82%88%E3%82%8D%E3%81%97%E3%81%8F%E3%81%8A%E9%A1%98%E3%81%84%E3%81%97%E3%81%BE%E3%81%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%22UPDATE%22%3E%3CLINGO-LABEL%3E%E5%9C%A7%E5%8A%9B%E3%82%BB%E3%83%B3%E3%82%B5%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%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%E3%80%81%E3%83%88%E3%83%BC%E3%83%9E%E3%82%B9%3CBR%20%2F%3E%E8%BF%85%E9%80%9F%E3%81%AA%E3%81%94%E5%AF%BE%E5%BF%9C%E3%81%82%E3%82%8A%E3%81%8C%E3%81%A8%E3%81%86%E3%81%94%E3%81%96%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%E6%A7%8B%E6%88%90%E3%81%AF%E3%83%87%E3%83%BC%E3%82%BF%E3%82%B7%E3%83%BC%E3%83%88%E3%81%AB%E5%AE%9A%E7%BE%A9%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%82%82%E3%81%AE%E3%81%A8%E3%81%BE%E3%81%A3%E3%81%9F%E3%81%8F%E5%90%8C%E3%81%98%E3%81%A7%E3%81%82%E3%82%8A%E3%80%81%E6%A6%82%E8%AA%AC%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%81%AE%E3%81%A8%E5%90%8C%E3%81%98%E6%89%8B%E9%A0%86%E3%81%AB%E5%BE%93%E3%81%A3%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%3CBR%20%2F%3E%3CBR%20%2F%3ESPIOPS%20%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%82%88%E3%81%86%E3%81%A8%E3%81%99%E3%82%8B%E3%81%A8%E3%80%81%E3%82%BB%E3%83%B3%E3%82%B5%E3%81%8B%E3%82%89%E3%81%AE%E5%BF%9C%E7%AD%94%E3%81%AF%200x0220%20%E3%81%AB%E3%81%AA%E3%82%8A%E3%80%81%E5%BE%8C%E7%B6%9A%E3%81%AE%E5%BF%9C%E7%AD%94%E3%81%A7%E3%82%82%E5%90%8C%E3%81%98%E3%81%BE%E3%81%BE%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%3CBR%20%2F%3E%E4%BD%95%E3%81%8B%E8%A6%8B%E9%80%83%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%81%8B%E3%81%A9%E3%81%86%E3%81%8B%E3%82%8F%E3%81%8B%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%3CBR%20%2F%3E%E3%81%93%E3%82%8C%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E4%BD%95%E3%81%8B%E8%80%83%E3%81%88%E3%81%AF%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%81%8B%3F%3CBR%20%2F%3E%3CBR%20%2F%3E%E3%82%88%E3%82%8D%E3%81%97%E3%81%8F%E3%81%8A%E9%A1%98%E3%81%84%E3%81%97%E3%81%BE%E3%81%99%E3%80%81'%3CBR%20%2F%3E%E3%83%A9%E3%82%B8%E3%83%B4%E3%82%A3%E3%82%B7%E3%83%A5%E3%83%8C%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%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%E3%80%81%E3%83%A9%E3%82%B8%E3%83%B4%E3%82%A3%E3%82%B7%E3%83%A5%E3%83%8C%E3%81%95%E3%82%93%3C%2FP%3E%0A%3CP%3ENBP8%20%E3%82%BB%E3%83%B3%E3%82%B5%E3%81%AF%E3%80%8116%20%E3%83%93%E3%83%83%E3%83%88%20%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%81%A8%202%20%E3%81%A4%E3%81%AE%E3%83%93%E3%83%83%E3%83%88%20%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E3%81%AE%E5%81%B6%E6%95%B0%E3%83%91%E3%83%AA%E3%83%86%E3%82%A3%E3%82%92%E5%82%99%E3%81%88%E3%81%9F%20SPI%20%E3%83%A2%E3%83%BC%E3%83%89%200%20(CPOL%3D0%E3%80%81CPHA%3D0)%20%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%BE%E3%81%99%E3%80%82Vector%20VT2710%20SPI%20%E8%A8%AD%E5%AE%9A%E3%81%8C%E3%81%93%E3%82%8C%E3%81%A8%E4%B8%80%E8%87%B4%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%81%93%E3%81%A8%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82WAKEUP%20%E3%81%BE%E3%81%9F%E3%81%AF%20CS_B%20%E3%82%B0%E3%83%AA%E3%83%83%E3%83%81%E3%81%AE%E5%BE%8C%E3%80%81%E3%82%AF%E3%83%AD%E3%83%83%E3%82%AF%E9%9A%9C%E5%AE%B3%E3%81%AE%E3%81%9F%E3%82%81%E6%9C%80%E5%88%9D%E3%81%AE%20SPI%20%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%AF%E7%84%A1%E8%A6%96%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%20-%26gt%3B%20%E6%9C%80%E5%88%9D%E3%81%AB%E3%83%80%E3%83%9F%E3%83%BC%20%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%82%92%E9%80%81%E4%BF%A1%E3%81%97%E3%81%A6%E3%82%A8%E3%83%A9%E3%83%BC%E3%82%92%E3%82%AF%E3%83%AA%E3%82%A2%E3%81%97%E3%81%BE%E3%81%99%E3%80%82SPI%20%E8%BB%A2%E9%80%81%E3%82%92%E9%96%8B%E5%A7%8B%E3%81%99%E3%82%8B%E5%89%8D%E3%81%AB%E3%80%81%E5%BF%85%E3%81%9A%20READY%20%E3%83%94%E3%83%B3%E3%81%8C%E3%82%A2%E3%82%B5%E3%83%BC%E3%83%88%E3%81%95%E3%82%8C%E3%82%8B%E3%81%AE%E3%82%92%E5%BE%85%E3%81%A3%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%E3%81%93%E3%82%8C%E3%81%AF%E3%80%81%E3%82%BB%E3%83%B3%E3%82%B5%E3%81%AE%E6%BA%96%E5%82%99%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%A6%E3%81%8A%E3%82%8A%E3%80%81CPU%20%E3%81%8C%E5%81%9C%E6%AD%A2%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%81%93%E3%81%A8%E3%82%92%E7%A4%BA%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%81%82%E3%81%9F%E3%82%8A%E3%81%AE%2016%20%E3%82%AF%E3%83%AD%E3%83%83%E3%82%AF%20%E3%82%B5%E3%82%A4%E3%82%AF%E3%83%AB%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AB%E3%82%8F%E3%81%9F%E3%81%A3%E3%81%A6%20CS_B%20%E3%81%8C%E4%BD%8E%E3%81%84%E3%81%BE%E3%81%BE%E3%81%A7%E3%81%82%E3%82%8B%E3%81%93%E3%81%A8%E3%80%81%E3%81%8A%E3%82%88%E3%81%B3%E3%83%91%E3%83%AA%E3%83%86%E3%82%A3%20%E3%83%93%E3%83%83%E3%83%88%E3%81%8C%E6%AD%A3%E3%81%97%E3%81%84%E3%81%93%E3%81%A8%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E9%9A%9C%E5%AE%B3%E3%83%93%E3%83%83%E3%83%88%20(s4..s0)%20%E3%82%92%E9%81%A9%E5%88%87%E3%81%AB%E5%87%A6%E7%90%86%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E3%81%84%E3%81%9A%E3%82%8C%E3%81%8B%E3%81%8C%E8%A8%AD%E5%AE%9A%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E5%A0%B4%E5%90%88%E3%81%AF%E3%80%81%E3%83%80%E3%83%9F%E3%83%BC%20%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%81%A7%E5%86%8D%E8%A9%A6%E8%A1%8C%E3%81%97%E3%81%BE%E3%81%99%E3%80%82s3%20(%E7%84%A1%E8%A6%96%E3%81%95%E3%82%8C%E3%81%9F%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89)%20%E3%82%82%E5%86%8D%E8%A9%A6%E8%A1%8C%E3%81%8C%E5%BF%85%E8%A6%81%E3%81%A7%E3%81%99%E3%80%82%E9%80%9A%E5%B8%B8%E3%81%AE%E3%82%BB%E3%83%B3%E3%82%B5%E6%93%8D%E4%BD%9C%E3%82%92%E5%86%8D%E9%96%8B%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%80%81%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E7%B5%82%E4%BA%86%E6%99%82%E3%81%AB%20SPIOPS%20%E3%83%AC%E3%82%B8%E3%82%B9%E3%82%BF%E3%82%92%E3%82%AF%E3%83%AA%E3%82%A2%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E3%81%93%E3%82%8C%E3%82%89%E3%81%AE%E6%89%8B%E9%A0%86%E3%81%AB%E3%82%88%E3%82%8A%E3%80%81%E9%80%9A%E5%B8%B8%E3%80%81%E7%B5%B1%E5%90%88%E4%B8%AD%E3%81%AE%E7%84%A1%E5%8A%B9%E3%81%AA%E5%BF%9C%E7%AD%94%E3%81%8C%E8%A7%A3%E6%B1%BA%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%0A%3CP%3EBRs%E3%80%81%E3%83%88%E3%83%BC%E3%83%9E%E3%82%B9%3C%2FP%3E%3C%2FLINGO-BODY%3E