你好团队,我需要将我的代码从6.0.2版本移植到6.0.10版本,因为我现在正在使用AC silicon芯片。我已经使用SDK 6.0.2在AB silicon上传并成功执行了代码。现在我需要将其上传到AC silicon芯片。我可以直接升级吗?
谢谢,古瑟姆
嗨goutham,
没有任何直接方法将应用程序从SDK6.0.2移植到SDK6.0.10版本,因为SDK6.0.2仅适用于DA14585 AB硅芯片,其ROM代码与AC硅芯片不同。尽管如此,您可以在DA14585 AC硅芯片中使用SDK6.0.10,并从一开始就移植应用程序代码。
谢谢,下午好
大家好,
实际上我已经将BLE传感器代码上载到了使用6.0.2 SDK的AB硅芯片(DA14585)的电路板上。我得到了输出.Now我正在尝试使用SDK 6.0.10在AC Silicon芯片中执行相同的代码,其中我无法获得所需的输出。我从一开始就是如你所说的更改。升级到最新的SDK时有任何其他方法可以做到吗?
没有任何其他方法将应用程序代码移植到最新的SDK。由于您将代码片段从SDK5.0.2添加到最新的SDK,因此您无法获取所需的结果,或者您的应用程序不起作用/编译?
你好团队,
我们通过集成AC硅芯片和传感器开发了一个原型板。我使用6.0.10 SDK运行I2CSensor代码。当我只运行I2C传感器代码时提供传感器数据(从外围示例),但如果我在BLE堆栈内调用相同的I2C传感器代码,则编译器在I2C_Readyte内击中WAITE_UNTIL_I2CREADY(BLE不是广告)。如果我将单独的ble_app_peripherial代码上传到电路板,我们可以使用通用ble app.so读取ADC默认值,这是硬件问题还是在堆栈中进行的任何更改?
谢谢,Goutham.n.
强烈建议不要修改BLE堆栈,因此您应该从I2C传感器代码中删除,因为传感器延迟了BLE活动。您应该将代码添加到应用程序级别中。如果我从所提到的那么正确理解,如果您不将代码片段添加到BLE堆栈中,您的项目将正确地工作,这是预期的。它不是硬件相关问题,然后设备停止广告,因为您修改了BLE堆栈。此外,您能否澄清与BLE堆栈的意思?请注意,BLE堆栈位于ROM代码中,您无法访问它。
你好,对话,BLE stack意味着我们正在通过调用i2c_传感器(初始化和读取传感器芯片ID)来更改BLE_应用程序_外围代码,同时我们还创建了一个新的配置文件和特性。
在ble_app_peripheral示例中,我们以以下方式更改了一些库1.在user_periph_setup.h中://增加#定义I2C_从设备地址0x6B//设置从设备地址#定义I2C_速度_模式I2C_快速//速度模式:I2C_标准(100 kbits/s),I2C_快速(400 kbits/s)#define i2c_address_mode i2c_7bit_addr //寻址模式:{i2c_7bit_addr,i2c_10bit_addr}#定义I2C字节地址大小I2C字节地址//地址宽度{I2C字节地址,I2C字节地址,I2C字节地址}
//选择I2C设置#define i2c_gpio_port gpio_port_0.#定义I2C_SCL_引脚GPIO_引脚2#定义I2C_SDA_引脚GPIO_引脚3
2.在用户安装程序C中:
//增加setword16(clk_amba_reg,0x00);//设置时钟(HCLK和PCLK)16MHzSetWord16(SET_FREEZE_REG,FRZ_WDOG);//看门狗SetBits16(系统控制、键盘锁定、1);//开放垫setbits16(sys_ctrl_reg,debugger_enable,1);//打开调试器// setbits16(pmu_ctrl_reg,periph_sleep,0);//退出外围电源uint8字节ID;i2c_eeprom_init(i2c_从地址、i2c_速度模式、i2c_地址模式、i2c_地址大小);//初始化传感器i2c_eeprom_read_byte(0x0f,&byte_id);//读取传感器芯片ID。setword16(reset_freeeze_reg,frz_wdog);//开始观看狗
3.在user_custs1_def.h中:创建自定义服务和特性
//自定义服务器1的服务4#定义DEF_SVC4_UUID_128{0x00、0x2A、0x93、0xA6、0xBD、0xD8、0x41、0x52、0xAC、0x0B、0x10、0x99、0x2E、0xC6、0xFE、0xED}//Acc
#定义DEF_SVC1_LSM_ACC_X_UUID_128{0x01、0x2A、0x93、0xA6、0xBD、0xD8、0x41、0x52、0xAC、0x0B、0x10、0x99、0x2E、0xC6、0xFE、0xED}//ACC
#定义DEF_SVC1_LSM_ACC_X_CHAR_LEN 100//ACC
#define def_svc1_acc_x_user_desc“sensor”// acc
之后,在以下库中执行用于创建自定义服务和特性的各个步骤:user_custs1_def.c //实现海关服务和特征数据库user_cust1_impl.h //定义的处理程序和回调计时器user\u cust1\u impl.c//处理程序和回调计时器说明user_peripheral.c //为我们的自定义特征创建了对冲点写命令。
如果我注释i2c_eeprom_read_byte(0x0F,&byte_ID);在user_periph_setup.C函数中,我们的原型板是广告,我们能够连接到一个通用的BLE应用程序,该应用程序能够看到创建的自定义服务和特性。我们还能够读取和写入创建的自定义特征。
但是,如果调用i2c_eeprom_read_byte(0x0f,&byte_id);在user_periph_setup.c中,原型不是广告,控制器在以下功能中被击中i2c错误代码i2c等待eeprom就绪(无效){uint16_t tx_abrt_source;
//检查是否收到确认for(Uint32_t i = 0; i {发送I2C命令(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寄存器if((tx_abrt_source&abrt_7b_addr_noack)== 0){返回i2c_no_error;}}返回i2c_7b_addr_noack_error;}
我们还尝试创建传感器库(sensor_id.c)并将函数定义为:无效i2c_试验(无效){uint8字节ID;//初始化I2C EEPROM的I2C接口i2c_eeprom_init(0x6B,i2c_速度_模式,i2c_地址_模式,i2c_地址_大小);test_read_byte(0x0f,&byte_id);}然后我们在user_periph_setup.C中调用了i2c_测试函数,仍然发生了同样的事情。
我们已经执行了相同的测试读取字节(0x0F和字节ID),在唯一的i2c示例中,我们能够读取传感器芯片ID。
请告诉我们我们如何解决这个问题?
我们的主要目的是通过I2C读取传感器数据,并通过BLE广播相同的数据。我们在pro开发板上用485子板(AB硅和SDDK 6.0.2)和传感器分接板完成了这项工作,工作非常完美。在那之后,只有我们将其用于原型开发。
谢谢Goutham.n.
强烈建议不要将传感器代码放入user_periph_setup.c函数中,因为事务会延迟系统。你能在调试代码中运行你的代码并试着找出代码被卡住的地方吗?可能是由于看门狗过期,设备停止了广告。我强烈建议您将传感器代码片段放入user_peripal.c文件中。
你好pm_dialog,我们在调试模式下运行代码,代码在下面的函数中被卡住i2c错误代码i2c等待eeprom就绪(无效){uint16_t tx_abrt_source;
//检查是否收到确认for(Uint32_t i = 0; i {发送I2C命令(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寄存器if((tx_abrt_source&abrt_7b_addr_noack)== 0){返回i2c_no_error;}}返回i2c_7b_addr_noack_error;}我们还通过在user_peripheral.c中调用sensor snippet代码来运行代码,但仍然没有改进。同样的问题重复出现,代码在等待时卡在上述函数中,直到I2C FIFO为空()。
但是如果我们只运行上面函数执行的i2c_传感器代码,那么我们已经在调试模式下运行了i2c_传感器代码,控制器每次调用代码片段时都在执行上面的函数。请告诉我们任何其他可以执行的方法。
非常感谢。古瑟姆
I2C驱动程序和您使用的功能用于接口EEPROM存储器,实现在通过发送0x08并等待来自另一侧的ACK的存储器来接通存储器(如果存储器准备好运行)。所以调用wait_until_i2c_fifo_is_empty()以检查Tx FIFO是否为空,因为之前已将字节放置到缓冲区以便传输数据。我认为它不是wait_until_i2c_fifo_is_empty()该设备仍然存在困扰,但没有从另一侧的响应的事实,因此驱动程序在发送0x08字节上,直到它从另一侧从设备获得ACK。除非某些东西保持线路忙碌,否则HW模块不会发送任何数据,因此它的FIFO它至少留在至少一个字节中。您能否在没有BLE活动的情况下测试传感器代码?您是否尝试探测I2C线路以检查您正在发送或接收的内容?
嗨goutham,
没有任何直接方法将应用程序从SDK6.0.2移植到SDK6.0.10版本,因为SDK6.0.2仅适用于DA14585 AB硅芯片,其ROM代码与AC硅芯片不同。尽管如此,您可以在DA14585 AC硅芯片中使用SDK6.0.10,并从一开始就移植应用程序代码。
谢谢,下午好
大家好,
实际上我已经将BLE传感器代码上载到了使用6.0.2 SDK的AB硅芯片(DA14585)的电路板上。我得到了输出.Now我正在尝试使用SDK 6.0.10在AC Silicon芯片中执行相同的代码,其中我无法获得所需的输出。我从一开始就是如你所说的更改。升级到最新的SDK时有任何其他方法可以做到吗?
谢谢,
古瑟姆
嗨goutham,
没有任何其他方法将应用程序代码移植到最新的SDK。由于您将代码片段从SDK5.0.2添加到最新的SDK,因此您无法获取所需的结果,或者您的应用程序不起作用/编译?
谢谢,下午好
你好团队,
我们通过集成AC硅芯片和传感器开发了一个原型板。我使用6.0.10 SDK运行I2CSensor代码。当我只运行I2C传感器代码时提供传感器数据(从外围示例),但如果我在BLE堆栈内调用相同的I2C传感器代码,则编译器在I2C_Readyte内击中WAITE_UNTIL_I2CREADY(BLE不是广告)。如果我将单独的ble_app_peripherial代码上传到电路板,我们可以使用通用ble app.so读取ADC默认值,这是硬件问题还是在堆栈中进行的任何更改?
谢谢,
Goutham.n.
嗨goutham,
强烈建议不要修改BLE堆栈,因此您应该从I2C传感器代码中删除,因为传感器延迟了BLE活动。您应该将代码添加到应用程序级别中。如果我从所提到的那么正确理解,如果您不将代码片段添加到BLE堆栈中,您的项目将正确地工作,这是预期的。它不是硬件相关问题,然后设备停止广告,因为您修改了BLE堆栈。此外,您能否澄清与BLE堆栈的意思?请注意,BLE堆栈位于ROM代码中,您无法访问它。
谢谢,下午好
你好,对话,
BLE stack意味着我们正在通过调用i2c_传感器(初始化和读取传感器芯片ID)来更改BLE_应用程序_外围代码,同时我们还创建了一个新的配置文件和特性。
在ble_app_peripheral示例中,我们以以下方式更改了一些库
1.
在user_periph_setup.h中:
//增加
#定义I2C_从设备地址0x6B//设置从设备地址
#定义I2C_速度_模式I2C_快速//速度模式:I2C_标准(100 kbits/s),I2C_快速(400 kbits/s)
#define i2c_address_mode i2c_7bit_addr //寻址模式:{i2c_7bit_addr,i2c_10bit_addr}
#定义I2C字节地址大小I2C字节地址//地址宽度{I2C字节地址,I2C字节地址,I2C字节地址}
//选择I2C设置
#define i2c_gpio_port gpio_port_0.
#定义I2C_SCL_引脚GPIO_引脚2
#定义I2C_SDA_引脚GPIO_引脚3
2.在用户安装程序C中:
//增加
setword16(clk_amba_reg,0x00);//设置时钟(HCLK和PCLK)16MHz
SetWord16(SET_FREEZE_REG,FRZ_WDOG);//看门狗
SetBits16(系统控制、键盘锁定、1);//开放垫
setbits16(sys_ctrl_reg,debugger_enable,1);//打开调试器
// setbits16(pmu_ctrl_reg,periph_sleep,0);//退出外围电源
uint8字节ID;
i2c_eeprom_init(i2c_从地址、i2c_速度模式、i2c_地址模式、i2c_地址大小);//初始化传感器
i2c_eeprom_read_byte(0x0f,&byte_id);//读取传感器芯片ID。
setword16(reset_freeeze_reg,frz_wdog);//开始观看狗
3.
在user_custs1_def.h中:创建自定义服务和特性
//自定义服务器1的服务4
#定义DEF_SVC4_UUID_128{0x00、0x2A、0x93、0xA6、0xBD、0xD8、0x41、0x52、0xAC、0x0B、0x10、0x99、0x2E、0xC6、0xFE、0xED}//Acc
#定义DEF_SVC1_LSM_ACC_X_UUID_128{0x01、0x2A、0x93、0xA6、0xBD、0xD8、0x41、0x52、0xAC、0x0B、0x10、0x99、0x2E、0xC6、0xFE、0xED}//ACC
#定义DEF_SVC1_LSM_ACC_X_CHAR_LEN 100//ACC
#define def_svc1_acc_x_user_desc“sensor”// acc
之后,在以下库中执行用于创建自定义服务和特性的各个步骤:
user_custs1_def.c //实现海关服务和特征数据库
user_cust1_impl.h //定义的处理程序和回调计时器
user\u cust1\u impl.c//处理程序和回调计时器说明
user_peripheral.c //为我们的自定义特征创建了对冲点写命令。
如果我注释i2c_eeprom_read_byte(0x0F,&byte_ID);在user_periph_setup.C函数中,我们的原型板是广告,我们能够连接到一个通用的BLE应用程序,该应用程序能够看到创建的自定义服务和特性。我们还能够读取和写入创建的自定义特征。
但是,如果调用i2c_eeprom_read_byte(0x0f,&byte_id);在user_periph_setup.c中,原型不是广告,控制器在以下功能中被击中
i2c错误代码i2c等待eeprom就绪(无效)
{
uint16_t tx_abrt_source;
//检查是否收到确认{
for(Uint32_t i = 0; i
发送I2C命令(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寄存器
if((tx_abrt_source&abrt_7b_addr_noack)== 0)
{
返回i2c_no_error;
}
}
返回i2c_7b_addr_noack_error;
}
我们还尝试创建传感器库(sensor_id.c)并将函数定义为:
无效i2c_试验(无效)
{
uint8字节ID;
//初始化I2C EEPROM的I2C接口
i2c_eeprom_init(0x6B,i2c_速度_模式,i2c_地址_模式,i2c_地址_大小);
test_read_byte(0x0f,&byte_id);
}
然后我们在user_periph_setup.C中调用了i2c_测试函数,仍然发生了同样的事情。
我们已经执行了相同的测试读取字节(0x0F和字节ID),在唯一的i2c示例中,我们能够读取传感器芯片ID。
请告诉我们我们如何解决这个问题?
我们的主要目的是通过I2C读取传感器数据,并通过BLE广播相同的数据。我们在pro开发板上用485子板(AB硅和SDDK 6.0.2)和传感器分接板完成了这项工作,工作非常完美。在那之后,只有我们将其用于原型开发。
谢谢
Goutham.n.
嗨goutham,
强烈建议不要将传感器代码放入user_periph_setup.c函数中,因为事务会延迟系统。你能在调试代码中运行你的代码并试着找出代码被卡住的地方吗?可能是由于看门狗过期,设备停止了广告。我强烈建议您将传感器代码片段放入user_peripal.c文件中。
谢谢,下午好
你好pm_dialog,
我们在调试模式下运行代码,代码在下面的函数中被卡住
i2c错误代码i2c等待eeprom就绪(无效)
{
uint16_t tx_abrt_source;
//检查是否收到确认{
for(Uint32_t i = 0; i
发送I2C命令(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寄存器
if((tx_abrt_source&abrt_7b_addr_noack)== 0)
{
返回i2c_no_error;
}
}
返回i2c_7b_addr_noack_error;
}
我们还通过在user_peripheral.c中调用sensor snippet代码来运行代码,但仍然没有改进。同样的问题重复出现,代码在等待时卡在上述函数中,直到I2C FIFO为空()。
但是如果我们只运行上面函数执行的i2c_传感器代码,那么我们已经在调试模式下运行了i2c_传感器代码,控制器每次调用代码片段时都在执行上面的函数。
请告诉我们任何其他可以执行的方法。
非常感谢。
古瑟姆
嗨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线路以检查您正在发送或接收的内容?
谢谢,下午好