Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

3D Hall (Magnetic sensor) Forum Discussions

bem22
Level 1
Level 1
First like given 5 sign-ins First reply posted

Hello everyone,

 

We're batch testing magnetometers for a new product.

 

We came across TLE493D-W2B6 and designed PCBs for it.

The main issue is... Wel we can't communicate to it!

Some system information:

We're running a Raspberry Pi Zero and from it we're powering the PCB with 3.3V. The i2c bus also works on with 3.3V high.

 

About the PCB:

We didn't notice that you have different SKUs for different addresses and in the absence of an address selector pin we involved an i2c address translator.

On the PCB now there are two slaves on the i2c bus, the one TLE493D and the Translator. On the sub bus of the Translator there's the other TLE493D

This is the schematic:

bem22_1-1645608589492.png

And this is the board layout with some highlights while trying to debug the board:

unknown.png

 The green arrows indicate which components are assembled to the PCB when testing. In the above case, we assembled the sensor with its capacitor, the two 2.2K pull-up resistors, and the JST connector. The copper pours connecting GND are not shown for brevity. So, here we tried to reduce the number of components that could cause the problem and left only one magnetometer.

The behavior of the i2c line is not correct with this setup and we cannot understand why.

When trying to discover the device on the i2c bus we see this:

unknown.png

Even without connecting the master to the bus, we see the same SCL line pull-down. All while the i2c lines are pulled high by the pull-up resistors.

It's worth mentioning that we're testing a different pair of magnetometers that is being discovered by the same setup.

What are we missing from the design which stops us from discovering the device/s?

 

0 Likes
1 Solution
Krupashankar
Moderator
Moderator
Moderator
250 replies posted 100 solutions authored 5 likes given

Hi @bem22,

Thanks for your feedback.

By default,  TLE493D-W2B6 uses a 2-byte addressing mode in that case you will not be able to discover the device using an I2C address translator. Dynamic address write is not possible by the I2C address translator.

2-byte addressing mode I2C frame format( Default):

Krupashankar_1-1646248846948.png

For more details, you could refer to section 2.1.3.1 2-byte read command in TLE493D-W2B6 User Manual 

In order to use address translator and to fetch data from single address, You could change TLE493D-W2B6 to a 1-byte read mode by configuring the PR register bit to 1.

Krupashankar_2-1646249803762.png

You could refer to section 1.2.4 Mode registers  in TLE493D-W2B6 User Manual 

Could you please try if you can discover the device from RPi using the 2-byte read frame format or please try configuring (TLE493D-W2B6) to 1-Byte read command to discover using address translator?

Could you please let us know your existing I2C frame format to read data from TLE493D-W2B6?

Could you please share your I2C code in RPi? If possible.

Please let us know if this solves your issue?

 

Thanks,

Krupashankar

View solution in original post

0 Likes
5 Replies
Krupashankar
Moderator
Moderator
Moderator
250 replies posted 100 solutions authored 5 likes given

Hi @bem22,

Apologies for the delayed response, Thanks for posting in the Infineon Community.

Could you please clarify the following:

  • Have you configured slave address correctly in the I2C Address translator? A2 device have read and write address of F0 and F1 indicating 7bit address of 0x78 this requires having following resistor combination XORL( Rlt = 887KOhm Rlb = 1MOhm)  and XORH ( Rht = 1Mohm and Rhb = 887 KOhm) in the address translator. For further details you could refer to LTC4316 Datasheet.
  • Could you please explain the I2C waveform attached, What does green and blue waveforms indicate are they representing SDA and SCL Lines? Could you please indicate when the SCL line is getting low
  • Could you please tell if the M1 is getting discovered  as it is connected directly to the master RPI?

  • It's worth mentioning that we're testing a different pair of magnetometers that is being discovered by the same setup.
    Could you please tell us if you are using another board with same sensors or different sensors in the same setup?
  • Are you seeing this issue when the translator is connected or even when the translator is removed?

 

These details will help us in identifying the root cause of the issue.

 

Thanks,

Krupashankar

0 Likes

1) Yes. I have set the address with the respective resistors.

2) The waveform attached are: Top (Green) SCL and Bottom (Blue) SDA. The ticks in green seem to be generated by the Magnetometer. The big wave that appears in SDA and SCL is an attempt to "discover" all devices from the address range. The SCL line goes low every 2.5ms

3) The magnetometer directly connected to RPi does not get discovered. None of the boards testing the magnetometer TLE493D-W2B6 get discovered (we have 6 in total = 12 magnetometers). The other boards have magnetometers from other manufacturers and are "discovered" when used the method attempted in the above waveform.

4) We attempted with the translator and without a translator. The issue remains the same: No magnetomoeter/s appear upon "discovery".

 

We tend to think that the magnetometer doesn't follow the default i2c protocol and that we need to disable a certain "Wake up" feature in order for it to work - But we are unsure.

Can you help figure this out?

 

0 Likes
Krupashankar
Moderator
Moderator
Moderator
250 replies posted 100 solutions authored 5 likes given

Hi @bem22,

Thanks for your feedback.

By default,  TLE493D-W2B6 uses a 2-byte addressing mode in that case you will not be able to discover the device using an I2C address translator. Dynamic address write is not possible by the I2C address translator.

2-byte addressing mode I2C frame format( Default):

Krupashankar_1-1646248846948.png

For more details, you could refer to section 2.1.3.1 2-byte read command in TLE493D-W2B6 User Manual 

In order to use address translator and to fetch data from single address, You could change TLE493D-W2B6 to a 1-byte read mode by configuring the PR register bit to 1.

Krupashankar_2-1646249803762.png

You could refer to section 1.2.4 Mode registers  in TLE493D-W2B6 User Manual 

Could you please try if you can discover the device from RPi using the 2-byte read frame format or please try configuring (TLE493D-W2B6) to 1-Byte read command to discover using address translator?

Could you please let us know your existing I2C frame format to read data from TLE493D-W2B6?

Could you please share your I2C code in RPi? If possible.

Please let us know if this solves your issue?

 

Thanks,

Krupashankar

0 Likes
bem22
Level 1
Level 1
First like given 5 sign-ins First reply posted

I'm using i2cdetect which is a general-purpose utility for i2c in Linux. 

Source code here:

https://kernel.googlesource.com/pub/scm/utils/i2c-tools/i2c-tools/+/v3.1.2/tools/i2cdetect.c

First of all I don't insist on reading 1-byte or 2-byte now. I'm familiar with multi-byte read and I understand the limits of the translator.

 

The problem is I cannot discover either device - at all. I can't configure the PR register because I cannot communicate with the device.

I received those instructions from one of your developers through another way:

"

The general principle of communicating with the sensor is:
 - Power up the sensor (preferable the VDD of the sensor is controllable by the microcontroller e.g. via a transistor)
 - Configure it into the operating mode you want to work with -> most people deactivate the Interrupt pulse in this step
 - Then read the data whenever necessary"
 
I think my problem resides in the "operating mode". There are no instructions on the datasheet of how to configure the <operating mode> or I cannot read it.
 
Could you please explain how I could do this?

 

Again, from what I can understand, the clock line is being pulled low every 2.5ms by the magnetometer. This seems to be intended to act as an interrupt so that a system would be sensor-driven and not uC-driven. I would like to make this master driven through i2c.

Please let me know if my request is still unclear.

 

0 Likes
Krupashankar
Moderator
Moderator
Moderator
250 replies posted 100 solutions authored 5 likes given

Hi @bem22,

Thanks for making things clear, We would need some more information for further debugging.

  • I2C operating frequency 
  • Operating voltage of Vcc
  • I2C bus waveform of one transaction, We would like to see each bit transaction between RPi and TLE493D sensor. ( Could you please try directly reading from the address 0xF1-Read address instead of scanning the entire range) 

 

Thanks,

Krupashankar

0 Likes