cancel
Showing results for 
Search instead for 
Did you mean: 

AIS2120x sensor read data issue

anandhram1988
Associate III

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 and @Eleon BORLINI @CJeff.1 

 

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
}

i use nxp 8 bit mcu : MC9S08SH32

MCU is 5v output, level shifter used between MCU and sensor to downgrade voltage to 3V3 ,

 

13 REPLIES 13
Andrew Neil
Super User

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!

A complex system that works is invariably found to have evolved from a simple system that worked.
A complex system designed from scratch never works and cannot be patched up to make it work.
anandhram1988
Associate III

I have edited, the receive ISR, please inform if anything else required 

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.

A complex system that works is invariably found to have evolved from a simple system that worked.
A complex system designed from scratch never works and cannot be patched up to make it work.
anandhram1988
Associate III

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 ,

anandhram1988_0-1750936410790.png

SPI bus log attached

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 ?

A complex system that works is invariably found to have evolved from a simple system that worked.
A complex system designed from scratch never works and cannot be patched up to make it work.
anandhram1988
Associate III
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
}
anandhram1988
Associate III

SPI trace attached already from the sensor pins, i have not tried with 3,3MCU voltage since 5 V is operating for this mcu

anandhram1988_0-1750940479516.png

 

Above trace is recorded from sensor pins


@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 ?

A complex system that works is invariably found to have evolved from a simple system that worked.
A complex system designed from scratch never works and cannot be patched up to make it work.
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
}