其实我已经上传了一个BLE传感器代码到使用6.0.2 SDK的AB硅片(DA14585)的电路板上。我得到了输出。Now I am trying to execute the same code in AC silicon chip using SDK 6.0.10 where I am not able to get the desired output. I have made changes from the beginning as you said.Is there any additional method to do while upgrading to latest SDK?
你好高,
没有任何直接将应用程序从SDK6.0.2移植到SDK6.0.10版本,因为SDK6.0.2仅适用于DA14585 AB芯片芯片,它具有来自AC硅芯片的不同ROM代码。虽然,您可以在DA14585 AC硅芯片中使用SDK6.0.10并从一开始就端口应用程序代码。
谢谢,PM_DIALOG.
嗨,团队,
其实我已经上传了一个BLE传感器代码到使用6.0.2 SDK的AB硅片(DA14585)的电路板上。我得到了输出。Now I am trying to execute the same code in AC silicon chip using SDK 6.0.10 where I am not able to get the desired output. I have made changes from the beginning as you said.Is there any additional method to do while upgrading to latest SDK?
谢谢,
Goutham.
你好高,
没有任何其他方法可以将应用程序代码移植到最新的SDK。由于您将来自SDK5.0.2的代码片段添加到最新的SDK中,您无法得到想要的结果,或者您的应用程序无法工作/编译?
谢谢,PM_DIALOG.
你好,
我们将交流硅芯片和传感器集成在一起,开发了一种原型板。我已经使用6.0.10 SDK运行了一个i2csensor代码到这块板。当我只运行i2c传感器代码时(从外设示例),它提供传感器数据,但如果我在ble堆栈中调用相同的i2c传感器代码,编译器将在wait_until_i2cready (ble不是广告)中的i2c_readbyte受到攻击。如果我上传单独的ble_app_periphery代码到板上,我们可以使用一个通用的BLE应用程序读取ADC默认值。所以,这是硬件问题还是堆栈中的任何更改?
谢谢,
高。N
你好高,
强烈建议不要修改BLE Stack,因此应该从中删除i2c传感器代码,因为传感器延迟了BLE活动。您应该将代码添加到应用程序级别。如果我从你提到的理解正确,你的项目正确工作,如果你不添加您的代码片段到ble堆栈,这是可预期的。这不是一个硬件相关的问题,然后设备停止发布,因为您修改了BLE堆栈。另外,您能解释一下BLE堆栈是什么意思吗?请注意BLE堆栈位于ROM代码中,您无法访问它。
谢谢,PM_DIALOG.
你好对话框,
BLE堆栈意味着通过调用i2c_sensor(初始化和读取传感器芯片ID)来更改BLE_APP_PERITIELAL代码,并且我们也创建了一个新的配置文件和特性。
在BLE_APP_PERITIVELAL示例中,我们以下列方式更改了一些库
1。
在user_periph_setup.h:
//添加
#define i2c_slave_address 0x6b //设置从设备地址
#define i2c_speed_mode i2c_fast //速度模式:i2c_standard(100 kbits / s),i2c_fast(400 kbits / s)
#define I2C_ADDRESS_MODE I2C_7BIT_ADDR //寻址方式:{I2C_7BIT_ADDR, I2C_10BIT_ADDR}
#define i2c_address_size i2c_1byte_addr //地址宽度{i2c_1byte_addr,i2c_2bytes_addr,i2c_3bytes_addr}
//选择I2C设置
#定义I2C_GPIO_PORT GPIO_PORT_0
#define i2c_scl_pin gpio_pin_2.
#define i2c_sda_pin gpio_pin_3.
2.在user_periph_setup.c:
//添加
SetWord16 (CLK_AMBA_REG 0 x00);//设置时钟(hclk和pclk
setword16(set_freeeze_reg,frz_wdog);//停止观看狗
SetBits16(Sys_ctrl_reg,pad_latch_en,1);//打开垫
SetBits16 (SYS_CTRL_REG DEBUGGER_ENABLE 1);/ /打开调试器
/ / SetBits16 (PMU_CTRL_REG PERIPH_SLEEP 0);//退出外部电源
uint8_t byte_id;
i2c_eeprom_init(i2c_slave_address,i2c_speed_mode,i2c_address_mode,i2c_address_size);//启动传感器
i2c_eeprom_read_byte (0 x0f &byte_ID);//读取传感器芯片ID。
SetWord16 (RESET_FREEZE_REG FRZ_WDOG);//开始看门狗
3。
在user_custs1_def.h中:创建了自定义服务和特征
//自定义服务器1的服务4
#define def_svc4_uuid_128 {0x00,0x2a,0x93,0xa6,0xbd,0xD8,0x41,0x52,0xAC,0x0b,0x10,0x99,0x2e,0xc6,0xfe,0xed} // ACC
#define def_svc1_lsm_acc_x_uuid_128 {0x01,0x2a,0x93,0xa6,0xbd,0xd8,0x41,0x52,0xAC,0x0b,0x10,0x99,0x2e,0xc6,0xfe,0xed} //
#define def_svc1_lsm_acc_x_car_len 100 // acc
#define DEF_SVC1_ACC_X_USER_DESC "Sensor" //ACC
然后,在下列图书馆分别执行创建海关服务和特色的步骤:
user_custs1_def.c //实现海关服务和特色数据库
User_cust1_impl.h //定义处理程序和回调计时器
user_cust1_impl.c // handler和回调计时器描述
为我们的自定义特性创建控制点写命令。
如果我评论i2c_eeprom_read_byte(0x0f,&byte_id);在User_periph_setup.c功能中,我们的原型板是广告,我们能够连接到能够查看创建的自定义服务和特性的通用BLE应用程序。我们还能够读取和写入创建的自定义特征。
但是如果调用i2c_eeprom_read_byte(0x0F,&byte_ID);在user_peripheral _setup. c中,原型不是广告,控制器在以下函数中被击中
i2c_error_code i2c_wait_until_eeprom_ready(void)
{
uint16_t tx_abrt_source;
//检查是否已收到ACK
For (uint32_t I = 0;我< I2C_MAX_RETRIES;我+ +)
{
send_i2c_command(0x08);//制作假人
WAIT_UNTIL_I2C_FIFO_IS_EMPTY ();//等待直到Tx FIFO为空
WAIT_UNTIL_NO_MASTER_ACTIVITY ();//等待直到没有主活动
tx_abrt_source = GetWord16 (I2C_TX_ABRT_SOURCE_REG);//读取I2C_TX_ABRT_SOURCE_REG寄存器
GetWord16 (I2C_CLR_TX_ABRT_REG);//清除I2C_TX_ABRT_SOURCE寄存器
if (((tx_abt_source & abt_7b_addr_noack) == 0) / /输出
{
返回I2C_NO_ERROR;
}
}
返回I2C_7B_ADDR_NOACK_ERROR;
}
我们还尝试了一个创建传感器库(Sensor_id.c)并将功能定义为:
void i2c_test(void)
{
uint8_t byte_id;
// I2C EEPROM初始化I2C接口
i2c_eeprom_init(0x6b,i2c_speed_mode,i2c_address_mode,i2c_address_size);
test_read_byte (0 x0f &byte_ID);
}
然后我们称为i2c_test函数在user_periph_setup.c中,仍然是同样的事情。
我们在唯一的I2C示例中执行了同样的Test_Read_Byte(0x0f,&byte_id),我们能够读取传感器芯片ID。
请告诉我们如何解决这个问题?
我们的主要目的是通过I2C读取传感器数据并通过BLE广播相同的数据。我们在Pro-Development Board上进行了此目的,有485个女儿板(AB Silicon,使用SDDK 6.0.2)和传感器分支板它是完美的。之后只有我们将此带到原型发展。
谢谢
高。N
你好高,
强烈建议不要将传感器代码放入User_PeriPH_SETUP.c功能中,因为事务延迟系统。您能否在调试代码中运行代码,并尝试找到代码卡的位置?由于看门狗到期,该设备可能会停止广告。我强烈建议您将传感器代码片段放入user_peripherAl.c文件中。
谢谢,PM_DIALOG.
你好PM_Dialog,
我们在调试模式下运行代码,代码卡在下面的函数中
i2c_error_code i2c_wait_until_eeprom_ready(void)
{
uint16_t tx_abrt_source;
//检查是否已收到ACK
For (uint32_t I = 0;我< I2C_MAX_RETRIES;我+ +)
{
send_i2c_command(0x08);//制作假人
WAIT_UNTIL_I2C_FIFO_IS_EMPTY ();//等到TX FIFO是空的*******这里的控制器陷入困境
WAIT_UNTIL_NO_MASTER_ACTIVITY ();//等待直到没有主活动
tx_abrt_source = GetWord16 (I2C_TX_ABRT_SOURCE_REG);//读取I2C_TX_ABRT_SOURCE_REG寄存器
GetWord16 (I2C_CLR_TX_ABRT_REG);//清除I2C_TX_ABRT_SOURCE寄存器
if (((tx_abt_source & abt_7b_addr_noack) == 0) / /输出
{
返回I2C_NO_ERROR;
}
}
返回I2C_7B_ADDR_NOACK_ERROR;
}
我们还通过调用user_peripheral.c中的传感器代码码来运行代码仍然没有改进。同样的问题重复代码在wait_until_i2c_fifo_is_empty()处于上面的函数中被困在上面的函数中。
但是,如果我们运行唯一的I2C_SENSOR代码,我们已经执行了上面的功能,我们在调试模式下运行i2c_sensor代码,每次调用该代码码时,控制器正在执行上述功能。
请告诉我们任何其他方法,可以执行。
谢谢
Goutham.
你好高,
您正在使用的I2C驱动程序和函数是用于连接eeprom内存,实现是通过发送0x08轮询内存(如果内存准备操作),并等待来自另一端的ACK。因此,WAIT_UNTIL_I2C_FIFO_IS_EMPTY()被调用,以检查TX FIFO是否为空,因为之前您已经放置了一个字节到缓冲区以传输数据。我假设不是WAIT_UNTIL_I2C_FIFO_IS_EMPTY()设备仍然卡住,而是没有从另一边响应的事实,所以驱动程序继续发送0x08字节,直到它从另一边的设备得到一个ACK。除非有什么东西保持线路繁忙,所以hw模块不会发送任何数据,所以FIFO它保持至少一个字节。你能在没有BLE活动的情况下测试传感器代码吗?您是否尝试探测I2C线路以检查正在发送或接收的内容?
谢谢,PM_DIALOG.