你好团队,我需要将代码从6.0.2到6.0.10版本移植,因为我现在正在使用AC Silicon芯片。我已经上传并成功地使用SDK 6.0.2中载了AB Silicon中的代码.Now我需要将其上传到AC Silicon芯片。我可以直接获得升级吗?
谢谢,Goutham.
嗨goutham,
没有任何直接将应用程序从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)的板。我得到了output.Now我试图使用SDK 6.0.10在那里,我不能够得到需要的结果执行在AC硅芯片相同的代码。你said.Is有任何其他的方法做,而升级到最新的SDK我已经从一开始的变化?
没有任何其他的方法来移植应用程序代码到最新的SDK。既然你从SDK5.0.2添加的代码片段到最新的SDK,你是不是能够得到想要的结果,或者您的应用程序不工作/编译?
你好团队,
我们通过整合AC硅芯片开发的原型板和sensor.I已运行使用6.0.10 SDK这款主板一i2csensor代码。这是给传感器数据时,我只运行I2C传感器代码(从外围例子),但如果我所说的BLE堆栈内同一个I2C传感器代码编译器在内部wait_until_i2cready i2c_readbyte越来越来袭(BLE不是广告)。如果我单独ble_app_peripherial代码上传到电路板上,我们可以使用通用的BLE app.So读ADC默认值,这是硬件问题或将栈所做的任何更改?
谢谢,Goutham.N
强烈建议不要修改BLE堆栈,所以你应该从因为传感器延迟BLE活动卸下I2C传感器代码。你应该添加代码到应用层面。如果我从你所提到的理解正确的话,你的项目工作正常,如果你不能加入你的代码片段的BLE堆栈,这是可预期的。这是不是硬件相关的问题,然后设备,因为你修改了BLE堆栈停止广告。另外,请你澄清你的意思是与BLE堆栈是什么?请注意,BLE堆栈是在ROM代码,你是不是能够访问它。
你好对话框,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×00);//组时钟(HCLK和PCLK)16MHz的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(为0x0F,&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
#定义DEF_SVC1_ACC_X_USER_DESC “传感器” // ACC
之后创建海关服务,并在下列库所进行的特征是各个步骤:user_custs1_def.c //实现海关和特征数据库user_cust1_impl.h //定义的处理器和回调定时器user_cust1_impl.c // handler和回调计时器描述user_peripheral.c //创建CONTRO点写我们自定义的特征命令。
如果我评论i2c_eeprom_read_byte(0x0f,&byte_id);在User_periph_setup.c功能中,我们的原型板是广告,我们能够连接到能够查看创建的自定义服务和特性的通用BLE应用程序。我们还能够读取和写入创建的自定义特征。
但是,如果调用i2c_eeprom_read_byte(为0x0F,与byte_ID);在user_periph_setup.C,原型是不是广告和控制器在下面的函数来袭i2c_error_code i2c_wait_until_eeprom_ready(void){uint16_t tx_abrt_source;
//检查是否已收到ACKfor(Uint32_t i = 0; i {send_i2c_command(0x08);//制作假人wait_until_i2c_fifo_is_empty();//等待,直到发送FIFO为空wait_until_no_master_actity();//等待直到没有主活动tx_abrt_source = GetWord16(I2C_TX_ABRT_SOURCE_REG);//读取I2C_TX_ABRT_SOURCE_REG寄存器GetWord16(I2C_CLR_TX_ABRT_REG);//清除I2C_TX_ABRT_SOURCE寄存器如果((tx_abrt_source&ABRT_7B_ADDR_NOACK)== 0){返回I2C_NO_ERROR;}}返回I2C_7B_ADDR_NOACK_ERROR;}
我们还尝试了一个创建传感器库(Sensor_id.c)并将功能定义为:void i2c_test(void){uint8_t byte_id;//初始化I2C接口的I2C EEPROMi2c_eeprom_init(0x6b,i2c_speed_mode,i2c_address_mode,i2c_address_size);test_read_byte(为0x0F,&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)和传感器分支板它是完美的。之后只有我们将此带到原型发展。
谢谢Goutham.N
强烈建议不要将传感器代码放入User_PeriPH_SETUP.c功能中,因为事务延迟系统。您能否在调试代码中运行代码,并尝试找到代码卡的位置?由于看门狗到期,该设备可能会停止广告。我强烈建议您将传感器代码片段放入user_peripherAl.c文件中。
你好PM_Dialog,我们跑在调试模式下的代码,该代码在下面的功能卡i2c_error_code i2c_wait_until_eeprom_ready(void){uint16_t tx_abrt_source;
//检查是否已收到ACKfor(Uint32_t i = 0; i {send_i2c_command(0x08);//制作假人wait_until_i2c_fifo_is_empty();//等到TX FIFO是空的*******这里的控制器陷入困境wait_until_no_master_actity();//等待直到没有主活动tx_abrt_source = GetWord16(I2C_TX_ABRT_SOURCE_REG);//读取I2C_TX_ABRT_SOURCE_REG寄存器GetWord16(I2C_CLR_TX_ABRT_REG);//清除I2C_TX_ABRT_SOURCE寄存器如果((tx_abrt_source&ABRT_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(),该装置仍stucked但事实证明,没有从对方的反应,所以司机不断,直到它从另一侧的设备的ACK发送0x08的字节。除非事情是保持忙碌的线条,使硬件模块将不会发送任何数据,因此它FIFO与至少一个字节停留。能否请您测试没有BLE活动传感器代码?你有没有尝试探查I2C线,以检查你所发送或接收?
嗨goutham,
没有任何直接将应用程序从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)的板。我得到了output.Now我试图使用SDK 6.0.10在那里,我不能够得到需要的结果执行在AC硅芯片相同的代码。你said.Is有任何其他的方法做,而升级到最新的SDK我已经从一开始的变化?
谢谢,
Goutham.
嗨goutham,
没有任何其他的方法来移植应用程序代码到最新的SDK。既然你从SDK5.0.2添加的代码片段到最新的SDK,你是不是能够得到想要的结果,或者您的应用程序不工作/编译?
谢谢,PM_DIALOG.
你好团队,
我们通过整合AC硅芯片开发的原型板和sensor.I已运行使用6.0.10 SDK这款主板一i2csensor代码。这是给传感器数据时,我只运行I2C传感器代码(从外围例子),但如果我所说的BLE堆栈内同一个I2C传感器代码编译器在内部wait_until_i2cready i2c_readbyte越来越来袭(BLE不是广告)。如果我单独ble_app_peripherial代码上传到电路板上,我们可以使用通用的BLE app.So读ADC默认值,这是硬件问题或将栈所做的任何更改?
谢谢,
Goutham.N
嗨goutham,
强烈建议不要修改BLE堆栈,所以你应该从因为传感器延迟BLE活动卸下I2C传感器代码。你应该添加代码到应用层面。如果我从你所提到的理解正确的话,你的项目工作正常,如果你不能加入你的代码片段的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×00);//组时钟(HCLK和PCLK)16MHz的
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(为0x0F,&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
#定义DEF_SVC1_ACC_X_USER_DESC “传感器” // ACC
之后创建海关服务,并在下列库所进行的特征是各个步骤:
user_custs1_def.c //实现海关和特征数据库
user_cust1_impl.h //定义的处理器和回调定时器
user_cust1_impl.c // handler和回调计时器描述
user_peripheral.c //创建CONTRO点写我们自定义的特征命令。
如果我评论i2c_eeprom_read_byte(0x0f,&byte_id);在User_periph_setup.c功能中,我们的原型板是广告,我们能够连接到能够查看创建的自定义服务和特性的通用BLE应用程序。我们还能够读取和写入创建的自定义特征。
但是,如果调用i2c_eeprom_read_byte(为0x0F,与byte_ID);在user_periph_setup.C,原型是不是广告和控制器在下面的函数来袭
i2c_error_code i2c_wait_until_eeprom_ready(void)
{
uint16_t tx_abrt_source;
//检查是否已收到ACK{
for(Uint32_t i = 0; i
send_i2c_command(0x08);//制作假人
wait_until_i2c_fifo_is_empty();//等待,直到发送FIFO为空
wait_until_no_master_actity();//等待直到没有主活动
tx_abrt_source = GetWord16(I2C_TX_ABRT_SOURCE_REG);//读取I2C_TX_ABRT_SOURCE_REG寄存器
GetWord16(I2C_CLR_TX_ABRT_REG);//清除I2C_TX_ABRT_SOURCE寄存器
如果((tx_abrt_source&ABRT_7B_ADDR_NOACK)== 0)
{
返回I2C_NO_ERROR;
}
}
返回I2C_7B_ADDR_NOACK_ERROR;
}
我们还尝试了一个创建传感器库(Sensor_id.c)并将功能定义为:
void i2c_test(void)
{
uint8_t byte_id;
//初始化I2C接口的I2C EEPROM
i2c_eeprom_init(0x6b,i2c_speed_mode,i2c_address_mode,i2c_address_size);
test_read_byte(为0x0F,&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)和传感器分支板它是完美的。之后只有我们将此带到原型发展。
谢谢
Goutham.N
嗨goutham,
强烈建议不要将传感器代码放入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; i
send_i2c_command(0x08);//制作假人
wait_until_i2c_fifo_is_empty();//等到TX FIFO是空的*******这里的控制器陷入困境
wait_until_no_master_actity();//等待直到没有主活动
tx_abrt_source = GetWord16(I2C_TX_ABRT_SOURCE_REG);//读取I2C_TX_ABRT_SOURCE_REG寄存器
GetWord16(I2C_CLR_TX_ABRT_REG);//清除I2C_TX_ABRT_SOURCE寄存器
如果((tx_abrt_source&ABRT_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.
嗨goutham,
所述I2C驱动程序和正在使用的功能是用于连接一个EEPROM存储器,实现是轮询的存储器(如果内存准备好操作),通过发送一个0x08的,并等待来自另一侧的ACK。所以WAIT_UNTIL_I2C_FIFO_IS_EMPTY(),以便被调用来检查TX FIFO为空,因为之前你已经为了放置一个字节的缓冲区来传输数据。我想,这不是WAIT_UNTIL_I2C_FIFO_IS_EMPTY(),该装置仍stucked但事实证明,没有从对方的反应,所以司机不断,直到它从另一侧的设备的ACK发送0x08的字节。除非事情是保持忙碌的线条,使硬件模块将不会发送任何数据,因此它FIFO与至少一个字节停留。能否请您测试没有BLE活动传感器代码?你有没有尝试探查I2C线,以检查你所发送或接收?
谢谢,PM_DIALOG.