Hi! I have an issue with 3D Gesture & Tracking Shield for Raspberry Pi (MGC3130) shield with raspberry pi 4 (latest raspbian aka raspberry pi os).
I have connected the I2C1 pins, reset and TS lines together with an additional 3v3 lines (pins 1,3,5,7,9,11,17).
The demo program (https://github.com/Seeed-Studio/Seeed_Linux_mgc3x30.git) simply does not work (pretends to connect but does not show any information). I tried to fix the code but it is a PoC draft with too many issues. But that’s not the point. I’ve written my own code in Python, but I’m still unable to get any sensor data.
The module does not send any sensor data, and the TS line indicates that no new data is available.
An attempt to sent a REQUEST_MESSAGE or SET_RUNTIME_PARAMETER results in a SYSTEM_STATUS response with 0x0001 error code (UnknownCommand)
The version string looks truncated (‘2.1.0;p:HillstarV01;x:Hillstar;DSP:ID9001r3686;i:B;f:22500;nMsg;s:trunkr2163:_\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff’), which suggest may be there was some issue with GestIC library upload. Where can I find the GestIC binary to reupload?
Here is the full log:
in <<<<<< (b'\x84\x00\x00\x83', b'\xaac\x80\xe6\x13d\x15 2.1.0;p:HillstarV01;x:Hillstar;DSP:ID9001r3686;i:B;f:22500;nMsg;s:trunkr2163:_\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff')
out >>>>> (b'\x0c\x00\x00\x06', b'\x83\x00\x00\x00\x00\x00\x00\x00')
in <<<<<< (b'\x10\x00\x01\x15', b'\x06\x8c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00')
out >>>>> (b'\x10\x00\x00\xa2', b'\x80\x00\x00\x00\x1b\x00\x00\x00\x1f\x00\x00\x00')
in <<<<<< (b'\x10\x00\x02\x15', b'\xa2\x8c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00')
out >>>>> (b'\x10\x00\x00\xa2', b'\xa1\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff')
in <<<<<< (b'\x10\x00\x03\x15', b'\xa2\x8c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00')
wait for sensor data time out!
in <<<<<< (None, None)
wait for sensor data time out!
in <<<<<< (None, None)
wait for sensor data time out!
in <<<<<< (None, None)
wait for sensor data time out!
in <<<<<< (None, None)
wait for sensor data time out!
in <<<<<< (None, None)
I’ve noticed that once in a while the chip occasionally resets itself, then starts sending the data!
Not sure what triggers it though.
in <<<<<< (b'\x84\x00\x00\x83', b'\xaac\x80\xe6\x13d\x15 2.1.0;p:HillstarV01;x:Hillstar;DSP:ID9001r3686;i:B;f:22500;nMsg;s:trunkr2163:_\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff')
out >>>>> (b'\x0c\x00\x00\x06', b'\x83\x00\x00\x00\x00\x00\x00\x00')
in <<<<<< (b'\x10\x00\x01\x15', b'\x06\x8c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00')
out >>>>> (b'\x10\x00\x00\xa2', b'\x80\x00\x00\x00\x1b\x00\x00\x00\x1f\x00\x00\x00')
in <<<<<< (b'\x10\x00\x02\x15', b'\xa2\x8c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00')
out >>>>> (b'\x10\x00\x00\xa2', b'\xa1\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff')
in <<<<<< (b'\x84\x00\x00\x83', b'\xaac\x80\xe6\x13d\x15 2.1.0;p:HillstarV01;x:Hillstar;DSP:ID9001r3686;i:B;f:22500;nMsg;s:trunkr2163:_\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff')
out >>>>> (b'\x04\x00\x00@', b'')
in <<<<<< (b'\x10\x00\x01\x15', b'@\x8c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00')
wait for sensor data time out!
in <<<<<< (None, None)
wait for sensor data time out!
in <<<<<< (None, None)
in <<<<<< (b'\x1a\x00\x00\x91', b'\x1f\x01\x01\x81\x00s\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
in <<<<<< (b'\x1a\x00\x01\x91', b'\x1f\x01\t\x81\x00s\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
in <<<<<< (b'\x1a\x00\x02\x91', b'\x1f\x01&\x81\x00s\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
in <<<<<< (b'\x1a\x00\x03\x91', b'\x1f\x01B\x81\x00s\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
in <<<<<< (b'\x1a\x00\x04\x91', b'\x1f\x01^\x81\x00s\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
in <<<<<< (b'\x1a\x00\x05\x91', b'\x1f\x01{\x81\x00s\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
in <<<<<< (b'\x1a\x00\x06\x91', b'\x1f\x01\x97\x81\x00s\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
in <<<<<< (b'\x1a\x00\x07\x91', b'\x1f\x01\xb3\x81\x00s\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
in <<<<<< (b'\x1a\x00\x08\x91', b'\x1f\x01\xd0\x81\x00s\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
in <<<<<< (b'\x1a\x00\t\x91', b'\x1f\x01\xec\x81\x00s\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
in <<<<<< (b'\x1a\x00\n\x91', b'\x1f\x01\xf1\x80\x00s\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
Another thing, I’ve noticed in the schematics that the shield has its own I2C 1k8 pull-up resistors. And the RPI has its own. Combined, the total resistance is too low. May be I will try to switch to I2C0 instead of I2C1, or even disconnect 3V3_RPI (the shield uses two 3V3 lines, 3V3_RPI on pin 1 for pull-up and 3V3_RPI_1 on pin 17 for VDD)
I’ve tried to connect it directly and it worked! Which proves the board and firmware is not broken. I still get errors in response to SET_RUNTIME_PARAMETER but the module does indeed reliably send the measurements. But it is not the way it was intended to be located in my setup.
I’ve tried thicker (1 sq mm) power cables (for 3V3 and GND), which didn’t help at all, I see no difference. I measured the voltage and it is stable 3.33 volt
I tried to limit the I2C baud rate, no difference.
I remembered that I had another i2c device on the bus and switched the shield to I2C0. Still no difference.
I thought that may be I didn’t connect any of the other pins, and checked the schematics and it looks like pins 1,3,5,7,9,11,17 are enough. Should I connect more GND lines?
Tried other pins for TS and RESET. No difference.
By “No difference” I mean my initial description of the problem. I do have 2-way communication with the board (it sends error responses to my commands) but it doesn’t send the measurements.
Both tools work fine when the shield is connected directly, so the software should be fine.
I really don’t understand what’s the difference it makes if i connect the shield with short wires instead of attaching it to rpi, why it sometimes resets itself and then starts sending measurements as normal.