Does anyone know how to send AT commands via I2C to SW XS1110?
The module squirts out NMEA sentences over I2C with no problems but when I write “AT\r\n” to the default register, I don’t get anything back…
I don’t have a UART connection available.
Hi @Ratlake,
1, Can you provide me the log?
2, You can try again with command: AT+GNSSFSN?\r\n
3, Please share me how to configure I2C for your module?
Thanks,
Hi Jerdung and thanks for replying…
When I issue any AT command (including AT+GNSSFSN?\r\n), the I2C read returns but with no data.
After writing the AT command, my code loops until the XS1110 INT pin goes low.
I am using a Nordic nRF52840 as host.
As far as I am aware, there is only one register to read from for the XS1110 so no need to write to a specific register before reading.
#define XS1110_BUFFER_SIZE 32
....
uint8_t data_to_write[]="AT+GNSSFSN?\r\n";
XS1110_writeMessge(data_to_write,sizeof(data_to_write));
XS1110_Read_AT();
...
void XS1110_Read_AT(void)
{
char *buffer;
uint16_t loop = 0;
uint16_t i = 0;
bool twi_is_busy = false;
char data_to_read[XS1110_BUFFER_SIZE]={0};
ret_code_t err_code;
memset(GNSSbuffer,'\0',sizeof(GNSSbuffer));
// carry on reading the regster until all data is read (ie PIN goes low)
while(nrf_gpio_pin_read(XM1110_INT))
{
err_code = nrf_drv_twi_rx( &m_twi, XS1110_ADDR, data_to_read, XS1110_BUFFER_SIZE);
memcpy(&GNSSbuffer[loop*XS1110_BUFFER_SIZE],data_to_read,XS1110_BUFFER_SIZE);
loop++;
nrf_delay_ms(1);
}
IEM_LOG_INFO("AT >%s<\n",&GNSSbuffer[0]);
}
uint8_t XS1110_writeMessge(uint8_t* addr, uint8_t len)
{
int i = 0;
ret_code_t err_code;
err_code = nrf_drv_twi_tx(&m_twi, XS1110_ADDR, addr, len,false);
APP_ERROR_CHECK(err_code);
return(err_code);
}
thanks for your help!
Nick
Hi @Ratlake,
1, Can you sent AT command manually to confirm this issue does not come from this script?
2, Did you send AT command to your module successfully before?
3, Please check your I2C connection.
Thanks,
Jerdung,
The module is embedded in a PCB so direct connection via UART is not possible.
I have not been able to send AT commands via I2C previously although getting the NMEA data works fine.
Could you outline how AT commands over I2C should work?
The documentation does not detail descriptions of any registers so I am not doing a I2C read to set the register before the write (although I have tried both).
Is there a document I can reference? I have looked at AirPrime_XA_and_XM_Series_NMEA_over_I2C_Application_Note_Rev1_0.pdf which states:“You can input I2C commands via the I2C interface. The interval of two input I2C packets cannot be less than 10ms because the slave needs 10ms to process the input data.”
Is this also relevant for the XS1110?
Nick
Hi @Ratlake,
Please try GNSS Tool to send AT command, you can get this tool at link: GNSS Tool.
After install this tool, please do step-by-step as below:
1, Define correct port number
2, Open port
3, Send AT command
Thanks,
Jerdung,
I believe this tool is for coms via COM ports - I have a DVK version of the XS1110 and can issue AT commands via com port with no issues.
The question is how to do the same thing via I2C.
Are you able to confirm that XS1110 can actually process AT commands via I2C?
I have a UBLOX M8N and this can be controlled via I2C using a a set of non AT commands (UBX messages).
Is there an equivalent for SW products?
thanks,
Nick
Hi @Ratlake,
In document “AirPrime - XS1110 - Development Kit Guide - Rev2.0.pdf” (you can get this document at link: https://source.sierrawireless.com/resources/airprime/hardware_specs_user_guides/airprime---xs1110---development-kit-guide/#sthash.9dRKjjAb.dpbs), at page 9, having section mentioning about setting transmission selection to I2C. Can you check your module refer that?
Thanks,
Jerdung,
Thanks for the suggestion but this document is aimed at the DVK.
However, I know I2C is working as I receive the NMEA sentences with no problems.
The question is does the XS1110 support AT commands via I2C or not - if it does, then I should be able to tweak my set-up if it does not, then clearly there is no point in continuing to spend time trying…
Is there anyone at Sierra Wireless who can confirm if AT commands via I2C is supported or not?
Nick
OK, I have a solution. I think the issue was down to timing.
I now wait until INT triggers, read NMEA sentences until INT goes low and then write the AT command.
I now get a response from the module as expected:
<info> app: INFO: XS1110_writeMessge: write 14 data >AT+GNSSVERS?
<
<info> app: INFO: ISR AT >+GNSSVERS,SWI5605XS_FDLS.18933.09,OK*24
Maybe this will help someone else:-)