Folks,
We want to use the ICM-20948 on a new project and use the DMP. However, there seems to be zero documentation on how to do this. There's nothing about how to program it, once it is programmed, then how you get information out.
The Atmel firmware in one of the dev kits seems to suggest you have to load an image into the DMP and I think I read somewhere that the code memory for said DMP is volatile, so that would make sense.
However, the image that comes with the Atmel kit has no API whatsoever as fas as I can make out. There's zero about whether you should write your own DMP code, whether you even can, let alone what compiler you'd need.
So, can anyone help please?
1. Is the image that comes with the Atmel dev kit the only image you'll ever need?
2. If so, how do you use this image?
3. If not, how do you write code for the DMP.
Many thanks,
Rob
Just here to bump this thread. I also bought the ICM-20948 DK because of how proudly InvenSense was touting the helpfulness of the DMP, and now that I have the board I have no idea how to enable it or alter it. The lack of explanatory documentation/user guides/examples has been frustrating.
Just bumping the thread too. The lack of documentation on this is unbelievable. The magnetometer values don't even seem to go into the DMP properly but there's no way to know because even the DMP application note covers nothing about configuring the magnetometer...
Just started using DK-20948 Dev board. After enabling sensors using "enable_sensor" command through UART terminal window, seems like it requires use of window command line to get sensor data according to eMD_Software_Guide_ICM20948.pdf. But "sensor_cli.exe" command times out. Anyone encountered such issue?
-afsar
It seems like Sensor-cli is using a different protocol version to the one used on the Nucleo-F411RE board. I added code to print out the bytes received from sensor-cli on the Nucleo board and here is what I get:
[I] ###################################
[I] # 20948 example #
[I] ###################################
[I] Open I2C serial interface
[I] ICM WHOAMI=ea
[I] Setting-up ICM device
[I] Booting up Icm20948...
[V] Reading WHOAMI...
[I] WHOAMI value: 0xea
[V] Putting Icm20948 in sleep mode...
[V] We're good to go !
[I] Load DMP3 image
[I] uart_getc=0x55
[I] uart_getc=0xaa
[I] uart_getc=0xaa
[I] uart_getc=0x3
[I] uart_getc=0x22
[E] DynProtocol: Invalid group ID
[D] DynProtocol_processPktByte(22) returned -1
[I] uart_getc=0x0
[E] DynProtocol: Invalid group ID
[D] DynProtocol_processPktByte(00) returned -1
[I] uart_getc=0x0
[E] DynProtocol: Invalid group ID
[D] DynProtocol_processPktByte(00) returned -1
[I] uart_getc=0x55
[E] DynProtocol: Invalid group ID
[D] DynProtocol_processPktByte(55) returned -1
[I] uart_getc=0x55
[E] DynProtocol: Invalid group ID
[D] DynProtocol_processPktByte(55) returned -1
[I] uart_getc=0x2
[E] DynProtocol: Invalid group ID
[D] DynProtocol_processPktByte(02) returned -1
[I] uart_getc=0x0
[E] DynProtocol: Invalid group ID
[D] DynProtocol_processPktByte(00) returned -1
[I] uart_getc=0x3
[I] uart_getc=0x12
[D] DeviceEmdWrapper: received command setup(SENSOR_RESERVED)
[I] Booting up Icm20948...
[V] Reading WHOAMI...
[I] WHOAMI value: 0xea
[V] Putting Icm20948 in sleep mode...
[V] We're good to go !
[W] No bias values retrieved from NV memory !
The groupID on the Nucleo board is 0x3, so not sure why it is interpreting 0x22 as a groupID.
Regards,
John
/*
* CommandHandlerTaskMain - Task that monitors the UART
*/
static void CommandHandlerTaskMain(void * arg){
(void)arg;
int byte;
do {
byte = EOF;
//printf("/n",byte);
//usart_serial_putchar(byte, *ptr);
//INV_MSG(INV_MSG_LEVEL_INFO, byte);
__disable_irq();
if(!RingByteBuffer_isEmpty(&uart_rx_rb)) {
byte = RingByteBuffer_popByte(&uart_rx_rb);
INV_MSG(INV_MSG_LEVEL_INFO,"0x%02x", byte);
}
__enable_irq();
if(byte != EOF) {
DynProTransportUart_rxProcessByte(&transport, (uint8_t)byte);
}
} while(byte != EOF);
}
this is how i have been printing mine
command to start and stop gyroscope data
DynProtocolTransportUart.c seems to describe this weird protocol commands
have a look at that https://github.com/Dotolie/libIDD/blob/master/bin/example.c
Hi, all and the Invensense team,
is ICM20948 obsoleted? it is mentioned as NRND so it is not recommended?
is there another IC with 9DOF with inbuilt fusion?
is it possible to use some TDK fusion software library + Accel+Gyro one IC + Mag IC available solution?
Looks like Invensense has a policy of no customer support whatsoever
I would also like to know what is the status of this part. It's marked as NRND by some suppliers, and there's no information about production, no information from Invensense
It was mentioned by the technical team that ICM20948 is obsolete.
Not only Invensense but many leading IMU companies obsolete 9DOF/10DOF, Reasons them are many
- Nonavailability of mag sensors
- Chip fab issues.. etc.
We are moving to the 2 chip solutions, But still inbuilt fusion and calibration seems unavailable from most IMUs.
this going to effect global application developments a lot.