2025-06-26 3:48 AM - edited 2025-06-26 5:40 AM
Hi , i am trying to read the sensor data of AIS2120x only for sensor ID type , i can see from the bus the data is transferred correctly, but i don't receive any data back from sensor rather its only 0.
i have attached the code snippet for this test, any leads will be helpful. JHo.1
@JHo.1 and @Eleon BORLINI @CJeff.1
i use nxp 8 bit mcu : MC9S08SH32
MCU is 5v output, level shifter used between MCU and sensor to downgrade voltage to 3V3 ,
2025-06-26 5:34 AM - edited 2025-06-26 5:47 AM
i have edited the code now(test), i cannot paste the appl code. sorry for that
from the schematic, 5v fixed is provided hence not tried without levelshifter and 3,3 mcu operating voltage
I would like to have below information:
commands to be written into spi for getting response form sensor.
2025-06-26 6:21 AM
Again, you haven't formatted the code.
I'm out.
2025-06-26 6:39 AM
volatile UB__8 ubAisRxData;
volatile UB__8 ubSpiStatus = 0;
void SPI_vInit(void) {
disable_interrupts();
configure_D_OUT_SPI_MOSI_Pin(); // PTBDD_PTBDD5 = 1; // MOSI
configure_D_IN_SPI_MISO_Pin(); //PTBDD_PTBDD4 = 0; // MISO
configure_D_OUT_SPI_CLK_Pin(); // PTBDD_PTBDD6 = 1; // SCK
set_CS1_high(); // Sensor 1 disable
set_CS2_high(); // Sensor 2 disable
// SPI Control Register 1
SPIC1 = 0xD4; // SPE=1, MSTR=1, SSOE=0, CPOL=0, CPHA=0, SPIE=1
//SPIC1 = 0xF0; // SPE=1, MSTR=1, SSOE=0, CPOL=0, CPHA=0, SPIE=1
// SPI Control Register 2
SPIC2 = 0x00;
// SPI Baud Rate Register (set to suitable speed)
//SPIBR = 0x10; // Divide bus clock 16 Mhz, spi clock 5,33Mhz
SPIBR = 0x11; // Divide bus clock 16 Mhz, spi clock 4 Mhz
// Clear status flags by reading SPIS and SPID
(void)SPIS;
(void)SPID;
enable_interrupts();
}
void SPI_vSendByte(UB__8 ubSpiTransfer, UB__8 ubSpiChannel)
{
volatile UB__8 ubAisStatus;
volatile UB__8 ubAisRx;
while (!(SPIS)); // Wait until transmit buffer is empty
SPID = ubSpiTransfer;
while(!ubSpiStatus);
ubSpiStatus = 0;
}
_INTERRUPT_VOID SPI_vTransferISR (void)
{
if(SPIS==0xA0)
{
ubAisRxData = SPID;
ubSpiStatus = 1;
}
}
UB__8 AIS1120SX_ubSensorConfig(UB__8 ubAisSensor)
{
UW_16 readVal;
UB__8 retVal = 0;
UB__8 ubCrcVal;
UW_16 delay;
ubCrcVal = AIS1120SX_ubCrcVal (0xE18000); // to read 0c0C register from sensor Sensor type Val
set_CS1_low();
for(delay =0; delay < 10; delay++);
AIS1120SX_vWrite(0xE1,0x80,ubAisSensor ); // REG_CONFIG FIR is 1600 for X,Y and
//no ofset cancellation
AIS1120SX_vWrite(0x00,ubCrcVal,ubAisSensor ); // REG_CONFIG FIR is 1600 for X,Y and
// AIS1120SX_vWrite(0x8D,0x00,ubAisSensor );
// for(delay =0; delay < 10; delay++);
// AIS1120SX_vWrite(0x00,0x00,ubAisSensor );
set_CS1_high();
return retVal;
}
void AIS1120SX_vWrite(UB__8 ubAis_addr, UB__8 ubAisData,UB__8 ubAisSensor) {
UW_16 delay;
SPI_vSendByte(ubAis_addr, ubAisSensor);
SPI_vSendByte(ubAisData, ubAisSensor);
}
UB__8 AIS1120SX_ubCrcVal(UL_32 ulCrcVal) {
UB__8 crc = 0x00;
UB__8 poly = 0x97;
//UL_32 poly = 0x12F;
UB__8 i;
UB__8 b;
// Process only the top 3 bytes of data24 (ignoring the lowest byte)
for (i = 0; i<3; i++)
{
crc ^= (UB__8)((ulCrcVal >> (i * 8)));
for (b = 0; b < 8; b++)
{
if (crc & 0x80)
{
crc = (UB__8)((crc << 1) ^ poly);
}
else
{
crc <<= 1;
}
}
}
return crc;
}
2025-06-26 6:39 AM - edited 2025-06-26 7:49 AM
@Andrew Neil this is the complete code after formatting and actual tested version
please look :)
2025-06-26 8:37 AM
@Andrew Neil could you please support, i am really blocked
2025-06-26 8:38 AM
I given you all the suggestions I have.
2025-06-26 9:52 AM
i have also tried with 3.3V MCU inputs problem is still same