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 3:58 AM
You seem to have forgotten how to post source code ?
@anandhram1988 wrote:i don't receive any data back from sensor rather its only 0.
Your code uses only spi_Write() - there are no reads!
2025-06-26 4:01 AM - edited 2025-06-26 4:04 AM
I have edited, the receive ISR, please inform if anything else required
2025-06-26 4:05 AM
Please read how to post source code - apply the proper formatting.
You need to show your implementation of spi_Write().
You haven't said what microcontroller you're using, what board it's on. or how it's connected to the sensor.
Please show schematics.
See: How to write your question to maximize your chances to find a solution.
2025-06-26 4:13 AM - edited 2025-06-26 4:14 AM
Thanks for reply,updated the main message also
spi_Write(uint8 data)
{
while (!(SPIS)); // Wait until transmit buffer is empty
SPID = data)
while(!ubSpiStatus);
ubSpiStatus = 0;
appl(RxData); //evaluate data
}
i use nxp 8 bit mcu : MC9S08SH32
MCU is 5v output, level shifter used between MCU and sensor to downgrade voltage to 3V3 ,
SPI bus log attached
2025-06-26 4:24 AM - edited 2025-06-26 4:38 AM
You still haven't read how to post source code - have you?
https://community.st.com/t5/community-guidelines/how-to-insert-source-code/ta-p/693413
@anandhram1988 wrote:MCU is 5v output, level shifter used between MCU and sensor to downgrade voltage to 3V3
Again, Please show the schematic!
@anandhram1988 wrote:SPI bus log attached
Is that before or after the level shifter?
Show what's actually happening at the sensor's pins.
Have you also looked at the signals on an oscilloscope? Are they clean?
PS:
@anandhram1988 wrote:i use nxp 8 bit mcu : MC9S08SH32. MCU is 5v output,
That device can run at 3.3V.
As a test, have you tried without the level shifter - running the MCU at 3.3V ?
2025-06-26 5:14 AM
test 1:
CS_low();
spi_Write(0xD1,0x80,ubAisSensor ); // command to read address 0x0C/REG_ID_SENSOR_TYPE from AIS2120x
// according to 32 byte cmmand format spi_Write(0x00,ubCrcVal,ubAisSensor );
CS_high();
Test 2:
CS_low();
spi_Write(0x8C,0x00,ubAisSensor ); // command to read address 0x0C/REG_ID_SENSOR_TYPE from AIS2120x
set_high();
//receive ISR
uint8 ubSpiStatus;
uint8 RxData;
_INTERRUPT_VOID SPI_vRxISR (void)
{
if(SPIS==0xA0)
{
RxData = SPID;
ubSpiStatus = 1;
}
}
spi_Write(uint8 data)
{
while (!(SPIS)); // Wait until transmit buffer is empty
SPID = data;
while(!ubSpiStatus);
ubSpiStatus = 0;
appl(RxData); //evaluate data
}
2025-06-26 5:16 AM - edited 2025-06-26 5:21 AM
SPI trace attached already from the sensor pins, i have not tried with 3,3MCU voltage since 5 V is operating for this mcu
Above trace is recorded from sensor pins
2025-06-26 5:23 AM
@anandhram1988 wrote:
test 1:
CS_low();
spi_Write(0xD1,0x80,ubAisSensor ); // command to read address 0x0C/REG_ID_SENSOR_TYPE from AIS2120x
// according to 32 byte cmmand format spi_Write(0x00,ubCrcVal,ubAisSensor );
CS_high();
Test 2:
CS_low();
spi_Write(0x8C,0x00,ubAisSensor ); // command to read address 0x0C/REG_ID_SENSOR_TYPE from AIS2120x
set_high();
In the above code, you supply three parameters to each spi_Write() call
But your definition of spi_Write() takes only one parameter
@anandhram1988 wrote:
spi_Write(uint8 data)
{
Also:
@anandhram1988 wrote:i use nxp 8 bit mcu : MC9S08SH32. MCU is 5v output,
That device can run at 3.3V.
As a test, have you tried without the level shifter - running the MCU at 3.3V ?
2025-06-26 5:31 AM
test 1:
CS_low();
Sensor_Write(0xD1,0x80,ubAisSensor ); // command to read address 0x0C/REG_ID_SENSOR_TYPE from AIS2120x
// according to 32 byte cmmand format Sensor_Write(0x00,ubCrcVal,ubAisSensor );
CS_high();
Test 2:
CS_low();
Sensor_Write(0x8C,0x00,ubAisSensor ); // command to read address 0x0C/REG_ID_SENSOR_TYPE from AIS2120x
set_high();
//Sensor interface
void Sensor_Write(uint8 addr, uint8 Data,(uint8 Sensor) {
// application specific
spi_Write(addr);
delay();
spi_Write(Data);
}
//receive ISR
uint8 ubSpiStatus;
uint8 RxData;
_INTERRUPT_VOID SPI_vRxISR (void)
{
if(SPIS==0xA0)
{
RxData = SPID;
ubSpiStatus = 1;
}
}
spi_Write(uint8 addr, uint8 Data,uint8 ubAisSensor)
{
while (!(SPIS)); // Wait until transmit buffer is empty
SPID = data;
while(!ubSpiStatus);
ubSpiStatus = 0;
while (!(SPIS)); // Wait until transmit buffer is empty
SPID = data;
while(!ubSpiStatus);
ubSpiStatus = 0;
appl(RxData); //evaluate data
}