有谁做过ublox I2C IIC 接口的
一起讨论下
目前我这边是没有ack
已经调通了 有需要探讨的 给我留言呀
代码可不可以发给小弟参考一下啊
小编,能给我一份你写的代码吗?谢谢了
*****************************************************************************/
#ifdef __CUST_NEW__
#include "kal_release.h"
#include "dcl.h"
#include "kal_trace.h"
#include "gps_I2C.h"
#include "us_timer.h" /* For ust_get_current_time() API*/
kal_bool gps_i2c_configure_done = KAL_FALSE;
extern const char gpio_sccb_serial_clk_pin;
extern const char gpio_sccb_serial_clk_pin_M_SCL;
extern const char gpio_sccb_serial_data_pin;
extern const char gpio_sccb_serial_data_pin_M_SDA;
//const char gpio_gps_i2c_data_pin=0xff;
//const char gpio_gps_i2c_clk_pin=0xff;
#define gpio_gps_i2c_clk_pin gpio_sccb_serial_clk_pin
#define gpio_gps_i2c_data_pin gpio_sccb_serial_data_pin
//#define kal_prompt_ublox_leo_trace
#define GPS_DELAY_TIMES 600
#define SET_CLK_OUT GPIO_InitIO(OUTPUT, gpio_gps_i2c_clk_pin);
#define SET_CLK_IN GPIO_InitIO(INPUT, gpio_gps_i2c_clk_pin);
#define SET_CLK_HIGH GPIO_WriteIO(1, gpio_gps_i2c_clk_pin)
#define GET_CLK_BIT GPIO_ReadIO(gpio_gps_i2c_clk_pin)
DCL_HANDLE gps_i2c_handle;
DCL_HANDLE gps_pmu_handle;
#define GPS_I2C_DELAY \
{\
volatile int count=0;\
for(;count<GPS_DELAY_TIMES;count++);\
}
void gps_clk_check(void)
{
SET_CLK_OUT;
while(GET_CLK_BIT!=1)
{
SET_CLK_HIGH;
}
}
void gps_ublox_check_scl(void)
{
DCL_HANDLE scl_handle;
GPIO_CTRL_READ_T sda_read;
scl_handle = DclGPIO_Open(DCL_GPIO, gpio_gps_i2c_clk_pin);
DclGPIO_Control(scl_handle, GPIO_CMD_SET_MODE_0, NULL);
DclGPIO_Control(scl_handle, GPIO_CMD_SET_DIR_IN, NULL);
DclGPIO_Control(scl_handle, GPIO_CMD_READ, (DCL_CTRL_DATA_T *)&sda_read);
}
void gps_i2c_udelay(kal_uint32 delay)
{
kal_uint32 ust = 0; //ust_get_current_time
kal_uint32 count = 0;
kal_uint32 break_count = 0;
ust = ust_get_current_time();
do{
if(ust_get_current_time() != ust)
count++;
else
break_count++;
}while((count < delay) && (break_count < 0xFFFFFF));
}
void gps_i2c_configure(kal_uint32 slave_addr, kal_uint32 speed)
{
I2C_CONFIG_T cfg;
DCL_STATUS status;
if(gpio_gps_i2c_data_pin == 0xFF) // HW I2C
{
if(!gps_i2c_configure_done)
{
gps_i2c_handle = DclSI2C_Open(DCL_I2C, DCL_I2C_OWNER_CAMERA);
}
cfg.eOwner = DCL_I2C_OWNER_CAMERA;
cfg.fgGetHandleWait = KAL_TRUE;
cfg.u1SlaveAddress = slave_addr;
cfg.u1DelayLen = 0;
cfg.eTransactionMode = DCL_I2C_TRANSACTION_FAST_MODE;
cfg.u4FastModeSpeed = speed;
cfg.u4HSModeSpeed = 0;
cfg.fgEnableDMA = KAL_FALSE;
status=DclSI2C_Configure(gps_i2c_handle, (DCL_CONFIGURE_T *)&cfg);
kal_prompt_ublox_leo_trace(0,"gps_i2c_configure():gps_i2c_handle=%d,status=%d",gps_i2c_handle,status);
}
gps_i2c_configure_done = KAL_TRUE;
}
void gps_i2c_power_on(kal_bool ON, kal_uint32 ldo, kal_uint32 ldo_volt)
{
PMU_CTRL_LDO_BUCK_SET_VOLTAGE_EN pmu_ldo_voltage_en;
PMU_CTRL_LDO_BUCK_SET_EN pmu_ldo_en;
if (gps_pmu_handle==DCL_HANDLE_NONE)
gps_pmu_handle = DclPMU_Open(DCL_PMU, FLAGS_NONE);
if( ON && (ldo_volt != 0) )
{
pmu_ldo_voltage_en.mod = (PMU_LDO_BUCK_LIST_ENUM)ldo;
pmu_ldo_voltage_en.voltage = (PMU_VOLTAGE_ENUM)ldo_volt;
DclPMU_Control(gps_pmu_handle, LDO_BUCK_SET_VOLTAGE_EN,(DCL_CTRL_DATA_T *)& pmu_ldo_voltage_en);
}
else if( ON && (ldo_volt == 0) )
{
pmu_ldo_en.mod = (PMU_LDO_BUCK_LIST_ENUM)ldo;
pmu_ldo_en.enable = KAL_TRUE;
DclPMU_Control(gps_pmu_handle, LDO_BUCK_SET_EN,(DCL_CTRL_DATA_T *)&pmu_ldo_en);
}
else
{
pmu_ldo_en.mod = (PMU_LDO_BUCK_LIST_ENUM)ldo;
pmu_ldo_en.enable = KAL_FALSE;
DclPMU_Control(gps_pmu_handle, LDO_BUCK_SET_EN,(DCL_CTRL_DATA_T *)&pmu_ldo_en);
}
}
// Start bit of I2C waveform
void gps_i2c_start(void)
{
DCL_HANDLE sda_handle, scl_handle;
kal_prompt_ublox_leo_trace(0,"++++++++++++++++++gps_i2c_start()++++++++++++++++++++\r\n");
if(gpio_gps_i2c_data_pin == 0xFF) // HW I2C
{
}
else
{
sda_handle = DclGPIO_Open(DCL_GPIO, gpio_gps_i2c_data_pin);
scl_handle = DclGPIO_Open(DCL_GPIO, gpio_gps_i2c_clk_pin);
DclGPIO_Control(sda_handle, GPIO_CMD_SET_MODE_0, NULL);
DclGPIO_Control(scl_handle, GPIO_CMD_SET_MODE_0, NULL);
DclGPIO_Control(sda_handle, GPIO_CMD_SET_DIR_OUT, NULL);
DclGPIO_Control(scl_handle, GPIO_CMD_SET_DIR_OUT, NULL);
//GPS_WriteGPIO(1,gpio_gps_i2c_data_pin);
DclGPIO_Control(sda_handle, GPIO_CMD_WRITE_HIGH, NULL);
DclGPIO_Control(sda_handle, GPIO_CMD_SET_DIR_OUT, NULL);
GPS_I2C_DELAY;
//GPS_WriteGPIO(1,gpio_gps_i2c_clk_pin);
DclGPIO_Control(scl_handle, GPIO_CMD_WRITE_HIGH, NULL);
GPS_I2C_DELAY;
//GPS_WriteGPIO(0,gpio_gps_i2c_data_pin);
DclGPIO_Control(sda_handle, GPIO_CMD_WRITE_LOW, NULL);
GPS_I2C_DELAY;
//GPS_WriteGPIO(1,gpio_gps_i2c_clk_pin);
DclGPIO_Control(scl_handle, GPIO_CMD_WRITE_HIGH, NULL);
GPS_I2C_DELAY;
//GPS_WriteGPIO(0,gpio_gps_i2c_data_pin);
DclGPIO_Control(sda_handle, GPIO_CMD_WRITE_LOW, NULL);
GPS_I2C_DELAY;
//GPS_WriteGPIO(0,gpio_gps_i2c_clk_pin);
DclGPIO_Control(scl_handle, GPIO_CMD_WRITE_LOW, NULL);
GPS_I2C_DELAY;
}
}
// Stop bit of I2C waveform
void gps_i2c_stop(void)
{
DCL_HANDLE sda_handle, scl_handle;
if(gpio_gps_i2c_data_pin == 0xFF) // HW I2C
{
}
else
{
sda_handle = DclGPIO_Open(DCL_GPIO, gpio_gps_i2c_data_pin);
scl_handle = DclGPIO_Open(DCL_GPIO, gpio_gps_i2c_clk_pin);
DclGPIO_Control(sda_handle, GPIO_CMD_SET_MODE_0, NULL);
DclGPIO_Control(scl_handle, GPIO_CMD_SET_MODE_0, NULL);
DclGPIO_Control(sda_handle, GPIO_CMD_SET_DIR_OUT, NULL);
DclGPIO_Control(scl_handle, GPIO_CMD_SET_DIR_OUT, NULL);
DclGPIO_Control(sda_handle, GPIO_CMD_WRITE_LOW, NULL);
DclGPIO_Control(sda_handle, GPIO_CMD_SET_DIR_OUT, NULL);
GPS_I2C_DELAY;
DclGPIO_Control(scl_handle, GPIO_CMD_WRITE_HIGH, NULL);
GPS_I2C_DELAY;
DclGPIO_Control(sda_handle, GPIO_CMD_WRITE_HIGH, NULL);
GPS_I2C_DELAY;
DclGPIO_Control(scl_handle, GPIO_CMD_WRITE_HIGH, NULL);
GPS_I2C_DELAY;
}
kal_prompt_ublox_leo_trace(0,"++++++++++++++++++gps_i2c_stop()++++++++++++++++++++\r\n");
DclGPIO_Control(sda_handle, GPIO_CMD_SET_MODE_1, NULL);
DclGPIO_Control(scl_handle, GPIO_CMD_SET_MODE_1, NULL);
}
// Send one byte from host to client
kal_bool gps_i2c_send_byte(kal_uint8 ucData)
{
//kal_bool bRet;
int i;
kal_bool ret;
kal_uint8 ucMask;
DCL_STATUS status = STATUS_INVALID_OPERATION;
GPIO_CTRL_READ_T sda_read;
I2C_CTRL_CONT_WRITE_T write;
DCL_HANDLE sda_handle, scl_handle;
if(gpio_gps_i2c_data_pin == 0xFF) // HW I2C
{
if(gps_i2c_configure_done)
{
write.pu1Data = &ucData;
write.u4DataLen = 1;
write.u4TransferNum = 1;
status = DclSI2C_Control(gps_i2c_handle, I2C_CMD_CONT_WRITE, (DCL_CTRL_DATA_T *)&write);
kal_prompt_ublox_leo_trace(0,"gps_i2c_send_byte():status=%d",status);
}
ret = (status == STATUS_OK)?KAL_TRUE:KAL_FALSE;
}
else
{
sda_handle = DclGPIO_Open(DCL_GPIO, gpio_gps_i2c_data_pin);
scl_handle = DclGPIO_Open(DCL_GPIO, gpio_gps_i2c_clk_pin);
DclGPIO_Control(sda_handle, GPIO_CMD_SET_MODE_0, NULL);
DclGPIO_Control(scl_handle, GPIO_CMD_SET_MODE_0, NULL);
DclGPIO_Control(sda_handle, GPIO_CMD_SET_DIR_OUT, NULL);
DclGPIO_Control(scl_handle, GPIO_CMD_SET_DIR_OUT, NULL);
for(i = 0, ucMask = 0x80; i < 8; i++, ucMask >>= 1)
{
if(ucData & ucMask)
DclGPIO_Control(sda_handle, GPIO_CMD_WRITE_HIGH, NULL);
else
DclGPIO_Control(sda_handle, GPIO_CMD_WRITE_LOW, NULL);
GPS_I2C_DELAY;
DclGPIO_Control(scl_handle, GPIO_CMD_WRITE_HIGH, NULL);
GPS_I2C_DELAY;
DclGPIO_Control(scl_handle, GPIO_CMD_WRITE_LOW, NULL);
GPS_I2C_DELAY;
}
DclGPIO_Control(sda_handle, GPIO_CMD_SET_DIR_IN, NULL);
DclGPIO_Control(sda_handle, GPIO_CMD_READ, (DCL_CTRL_DATA_T *)&sda_read);
DclGPIO_Control(scl_handle, GPIO_CMD_WRITE_HIGH, NULL);
GPS_I2C_DELAY;
DclGPIO_Control(scl_handle, GPIO_CMD_WRITE_LOW, NULL);
GPS_I2C_DELAY;
//kal_prompt_ublox_leo_trace(0,"send ack=%d\r\n",sda_read.u1IOData);
ret = (sda_read.u1IOData == GPIO_IO_HIGH)?KAL_TRUE:KAL_FALSE;
//return sda_read.u1IOData;
}
return ret;
}
// Receive one byte form client to host
kal_uint8 gps_i2c_receive_byte(kal_bool bAck)
{
kal_uint8 ucRet = 0;
int i;
I2C_CTRL_CONT_READ_T read;
GPIO_CTRL_READ_T sda_read;
DCL_STATUS status;
DCL_HANDLE sda_handle, scl_handle;
if(gpio_gps_i2c_data_pin == 0xFF) // HW I2C
{
if(gps_i2c_configure_done)
{
read.pu1Data = &ucRet;
read.u4DataLen = 1;
read.u4TransferNum = 1;
status = DclSI2C_Control(gps_i2c_handle, I2C_CMD_CONT_READ, (DCL_CTRL_DATA_T *)&read);
kal_prompt_ublox_leo_trace(0,"gps_i2c_receive_byte():status=%d",status);
ucRet = (status == STATUS_OK)?KAL_TRUE:KAL_FALSE;
}
}
else
{
gps_clk_check();
sda_handle = DclGPIO_Open(DCL_GPIO, gpio_gps_i2c_data_pin);
scl_handle = DclGPIO_Open(DCL_GPIO, gpio_gps_i2c_clk_pin);
DclGPIO_Control(sda_handle, GPIO_CMD_SET_MODE_0, NULL);
DclGPIO_Control(scl_handle, GPIO_CMD_SET_MODE_0, NULL);
DclGPIO_Control(sda_handle, GPIO_CMD_SET_DIR_IN, NULL);
DclGPIO_Control(scl_handle, GPIO_CMD_SET_DIR_OUT, NULL);
for(i = 7; i >= 0; i--)
{
DclGPIO_Control(sda_handle, GPIO_CMD_READ, (DCL_CTRL_DATA_T *)&sda_read);
ucRet |= sda_read.u1IOData << i;
DclGPIO_Control(scl_handle, GPIO_CMD_WRITE_HIGH, NULL);
GPS_I2C_DELAY;
DclGPIO_Control(scl_handle, GPIO_CMD_WRITE_LOW, NULL);
GPS_I2C_DELAY;
}
DclGPIO_Control(sda_handle, GPIO_CMD_SET_DIR_OUT, NULL);
if(bAck)
DclGPIO_Control(sda_handle, GPIO_CMD_WRITE_HIGH, NULL);
else
DclGPIO_Control(sda_handle, GPIO_CMD_WRITE_LOW, NULL);
GPS_I2C_DELAY;
DclGPIO_Control(scl_handle, GPIO_CMD_WRITE_HIGH, NULL);
GPS_I2C_DELAY;
DclGPIO_Control(scl_handle, GPIO_CMD_WRITE_LOW, NULL);
GPS_I2C_DELAY;
}
return ucRet;
}
// I2C send data fuction
kal_bool gps_i2c_send(kal_uint8 ucDeviceAddr, kal_uint8 ucBufferIndex, kal_uint8* pucData, kal_uint32 unDataLength)
{
kal_uint32 i;
kal_uint8 write_buf[9];
kal_bool bRet = KAL_TRUE;
I2C_CTRL_CONT_WRITE_T write;
DCL_STATUS status;
//kal_prompt_ublox_leo_trace(0,"gps_i2c_send()");
if(gpio_gps_i2c_data_pin == 0xFF) // HW I2C
{
if(gps_i2c_configure_done)
{
write_buf[0] = ucBufferIndex;
for(i=0;i<unDataLength;i++)
{
write_buf[i+1] = *(pucData+i);
}
write.pu1Data = write_buf;
write.u4DataLen = unDataLength+1;
write.u4TransferNum = 1;
status = DclSI2C_Control(gps_i2c_handle, I2C_CMD_CONT_WRITE, (DCL_CTRL_DATA_T *)&write);
kal_prompt_ublox_leo_trace(0,"gps_i2c_send():status=%d",status);
if(status != STATUS_OK)
return KAL_FALSE;
}
}
else
{
gps_i2c_start();
if(gps_i2c_send_byte(ucDeviceAddr & 0xFE) == GPS_I2C_ACK)
{
if(gps_i2c_send_byte(ucBufferIndex) == GPS_I2C_ACK)
{
for(i = 0; i < unDataLength; i++)
{
if(gps_i2c_send_byte(pucData) == GPS_I2C_NAK)
{
bRet = KAL_FALSE;
break;
}
}
}
else
{
bRet = KAL_FALSE;
}
}
else
{
bRet = KAL_FALSE;
}
gps_i2c_stop();
}
return bRet;
}
kal_bool gps_i2c_send_ubx(kal_uint8 ucDeviceAddr , kal_uint8* pucData, kal_uint32 unDataLength)
{
kal_uint32 i;
kal_uint8 write_buf[9];
kal_bool bRet = KAL_TRUE;
I2C_CTRL_CONT_WRITE_T write;
DCL_STATUS status;
kal_bool ack;
//kal_prompt_ublox_leo_trace(0,"gps_i2c_send()");
if(gpio_gps_i2c_data_pin == 0xFF) // HW I2C
{
if(gps_i2c_configure_done)
{
for(i=0;i<unDataLength;i++)
{
write_buf = *(pucData+i);
}
write.pu1Data = write_buf;
write.u4DataLen = unDataLength;
write.u4TransferNum = 1;
status = DclSI2C_Control(gps_i2c_handle, I2C_CMD_CONT_WRITE, (DCL_CTRL_DATA_T *)&write);
kal_prompt_ublox_leo_trace(0,"gps_i2c_send():status=%d",status);
if(status != STATUS_OK)
return KAL_FALSE;
}
}
else
{
gps_i2c_start();
if(gps_i2c_send_byte(ucDeviceAddr & 0xFE) == GPS_I2C_ACK)
{
for(i = 0; i < unDataLength; i++)
{
ack=gps_i2c_send_byte(pucData);
if(ack== GPS_I2C_NAK)
{
dbg_uart_print_trace_rn(0,"GPS_I2C_NAK[%d]",i);
//bRet = KAL_FALSE;
//break;
}
else
dbg_uart_print_trace_rn(0,"GPS_I2C_ACK[%d]",i);
}
}
else
{
dbg_uart_print_trace_rn(0,"gps_i2c_send():status=(ucDeviceAddr & 0xFE)");
bRet = KAL_FALSE;
}
gps_i2c_stop();
}
return bRet;
}
kal_bool gps_i2c_send_ext(kal_uint8 ucDeviceAddr, kal_uint16 ucBufferIndex, kal_uint8* pucData, kal_uint32 unDataLength)
{
kal_uint32 i;
kal_uint8 write_buf[10];
kal_bool bRet = KAL_TRUE;
I2C_CTRL_CONT_WRITE_T write;
DCL_STATUS status;
kal_uint8 addr_h = ( ucBufferIndex >> 8 )& 0xFF;
kal_uint8 addr_l = ucBufferIndex&0xFF;
kal_uint32 offset = 0;
kal_uint8 pkt_len;
if(gpio_gps_i2c_data_pin == 0xFF) // HW I2C
{
if(gps_i2c_configure_done)
{
while ( offset <= unDataLength )
{
write_buf[0] = ((ucBufferIndex + offset)>>8)&0xFF;
write_buf[1] = (ucBufferIndex + offset)&0xFF;
if ( unDataLength - offset > 6 )
{
pkt_len = 6;
}
else
{
pkt_len = unDataLength - offset;
}
memcpy( &write_buf[2], &pucData[offset], pkt_len );
offset += pkt_len;
write.pu1Data = write_buf;
write.u4DataLen = pkt_len+2;
write.u4TransferNum = 1;
status = DclSI2C_Control(gps_i2c_handle, I2C_CMD_CONT_WRITE, (DCL_CTRL_DATA_T *)&write);
if(status != STATUS_OK)
return KAL_FALSE;
if ( offset == unDataLength )
break;
}
}
}
else
{
gps_i2c_start();
if(gps_i2c_send_byte(ucDeviceAddr & 0xFE) == GPS_I2C_ACK)
{
if ( (gps_i2c_send_byte(addr_h) == GPS_I2C_ACK) &&
(gps_i2c_send_byte(addr_l) == GPS_I2C_ACK) )
{
for(i = 0; i < unDataLength; i++)
{
if(gps_i2c_send_byte(pucData) == GPS_I2C_NAK)
{
bRet = KAL_FALSE;
break;
}
}
}
else
{
bRet = KAL_FALSE;
}
}
else
{
bRet = KAL_FALSE;
}
gps_i2c_stop();
}
return bRet;
}
// I2C receive data function
kal_bool gps_i2c_receive(kal_uint8 ucDeviceAddr, kal_uint8 ucBufferIndex, kal_uint8* pucData, kal_uint32 unDataLength)
{
kal_uint32 i;
kal_bool bRet = KAL_TRUE;
I2C_CTRL_WRITE_AND_READE_T write_read;
DCL_STATUS status;
if(gpio_gps_i2c_data_pin == 0xFF) // HW I2C
{
if(gps_i2c_configure_done)
{
write_read.pu1InData = pucData;
write_read.u4InDataLen = unDataLength;
write_read.pu1OutData = &ucBufferIndex;
write_read.u4OutDataLen = 1;
status=DclSI2C_Control(gps_i2c_handle, I2C_CMD_WRITE_AND_READ, (DCL_CTRL_DATA_T *)&write_read);
kal_prompt_ublox_leo_trace(0,"gps_i2c_receive():status=%d",status);
if(status != STATUS_OK)
return KAL_FALSE;
}
}
else
{
gps_i2c_start();
if(gps_i2c_send_byte(ucDeviceAddr & 0xFE) == GPS_I2C_ACK)
{
if(gps_i2c_send_byte(ucBufferIndex) == GPS_I2C_ACK)
{
gps_i2c_start();
if(gps_i2c_send_byte(ucDeviceAddr | 0x01) == GPS_I2C_ACK)
{
for(i = 0; i < unDataLength - 1; i++)
{
kal_uint8 tmp;
tmp=pucData = gps_i2c_receive_byte((kal_bool)GPS_I2C_ACK);
if(tmp<0x7F)
{
kal_prompt_ublox_leo_trace(0,"%c",(char)tmp);
// pucData[j++]=tmp;
//pucData[j]=0;
}
}
pucData[unDataLength - 1] = gps_i2c_receive_byte((kal_bool)GPS_I2C_NAK);
}
else
{
kal_prompt_ublox_leo_trace(0,"send_byte no ACK\r\n");
bRet = KAL_FALSE;
}
}
else
{
kal_prompt_ublox_leo_trace(0,"BufferAddr no ACK\r\n");
bRet = KAL_FALSE;
}
}
else
{
kal_prompt_ublox_leo_trace(0,"DeviceAddr no ACK\r\n");
bRet = KAL_FALSE;
}
gps_i2c_stop();
}
return bRet;
}
// I2C receive data function
kal_bool gps_i2c_receive_no_addr_(kal_uint8 ucDeviceAddr, kal_uint8* pucData, kal_uint32 unDataLength)
{
kal_uint32 i;
kal_bool bRet = KAL_TRUE;
I2C_CTRL_CONT_READ_T read;
DCL_STATUS status;
if(gpio_gps_i2c_data_pin == 0xFF) // HW I2C
{
if(gps_i2c_configure_done)
{
read.pu1Data = pucData;
read.u4DataLen = unDataLength;
read.u4TransferNum = 1;
status = DclSI2C_Control(gps_i2c_handle, I2C_CMD_CONT_READ, (DCL_CTRL_DATA_T *)&read);
kal_prompt_ublox_leo_trace(0,"gps_i2c_receive_no_addr():status=%d",status);
kal_prompt_ublox_leo_trace(0,"%s",read.pu1Data);
bRet = (status == STATUS_OK)?KAL_TRUE:KAL_FALSE;
}
}
else
{
gps_i2c_start();
if(gps_i2c_send_byte(ucDeviceAddr | 0x01) == GPS_I2C_ACK)
{
int j=0;
kal_uint8 tmp;
for(i = 0; i < unDataLength ; i++)
{
tmp= gps_i2c_receive_byte((kal_bool)GPS_I2C_ACK);
if(tmp<0x7F)
{
kal_prompt_ublox_leo_trace(0,"%c",(char)tmp);
pucData[j++]=tmp;
pucData[j]=0;
}
}
}
else
{
bRet = KAL_FALSE;
}
gps_i2c_stop();
}
return bRet;
}
// I2C receive data function
kal_bool gps_i2c_receive_no_addr(kal_uint8 ucDeviceAddr, kal_uint8* pucData, kal_uint32 unDataLength)
{
kal_uint32 i;
kal_bool bRet = KAL_TRUE;
I2C_CTRL_CONT_READ_T read;
DCL_STATUS status;
if(gpio_gps_i2c_data_pin == 0xFF) // HW I2C
{
if(gps_i2c_configure_done)
{
read.pu1Data = pucData;
read.u4DataLen = unDataLength;
read.u4TransferNum = 1;
status = DclSI2C_Control(gps_i2c_handle, I2C_CMD_CONT_READ, (DCL_CTRL_DATA_T *)&read);
kal_prompt_ublox_leo_trace(0,"gps_i2c_receive_no_addr():status=%d",status);
kal_prompt_ublox_leo_trace(0,"%s",read.pu1Data);
bRet = (status == STATUS_OK)?KAL_TRUE:KAL_FALSE;
}
