9个员额/ 0个新员额
最后发表
你们Kinson
离线
最后看到:4年11个月前
加入:2016-09-07 08:14
关于mac的问题

您好!
我想通过应用程序将我希望的MAC地址发送给14580年,然后保存在外部SPI flash中,下次启动的时候就使用新的MAC地址。然后我需要在哪里新mac的赋值给dev_bdaddr吗?谢谢

设备:
Gongyu_Dialog
离线
最后看到:1天19小时前
加入:2016-04-27 07:07
芯片上电拿地址的流程如下:

芯片上电拿地址的流程如下:
找到system_init函数
1.580上电首先会从OTP里去读地址存到dev_bdaddr,函数流程nvds_read_bdaddr - > nvds_read_bdaddr_from_otp
2.rwip_init函数,这个函数因为BLE_HOST_PRESENT定义了,所以跑的是罗里的版本,不是SDK里的同名函数。
3.在rwip_init函数里面,会调用到rwble_init - > lld_init (false) / /假代表不需要重置
4. lld_init函数会调用jump_table_base里的lld_init_func函数
5. lld_init_func里面会调用nvds_get函数去拿NVDS_TAG_BD_ADDRESS里的蓝牙地址。获取的地址就是最后设备会用到的地址。
nvds_get对应SDK代码里的jump_table里的custom_nvds_get_func。
6. custom_nvds_get_func函数里面,查看关于NVDS_TAG_BD_ADDRESS部分。co_null_bdaddr为全0地址。
如果dev_bdaddr里是全0,则调用nvds_get_func函数(ROM固化函数)去拿SDK里面nvds_data_storage结构里的地址。(在nvds.c文件里)
如果不是0,则dev_bdaddr就是实际获取的地址。

所以,可以在函数custom_nvds_get_func里面修改

你们Kinson
离线
最后看到:4年11个月前
加入:2016-09-07 08:14
嗨Gongyu_Dialog,

嗨Gongyu_Dialog,
我在调试下操作spi flash,程序会跑飞,这是怎么回事?谢谢

Gongyu_Dialog
离线
最后看到:1天19小时前
加入:2016-04-27 07:07
确定管脚都配置正确了?另外,flash初始化的函数都调用的到

确定管脚都配置正确了?另外,flash初始化的函数都调用的到。

你们Kinson
离线
最后看到:4年11个月前
加入:2016-09-07 08:14
嗨Gongyu_Dialog,

嗨Gongyu_Dialog,
管脚已经正确配置好了,初始化也初始化了。现在问题是,如果读写flash的话,程序就会死掉,不读写程序就正常。

Gongyu_Dialog
离线
最后看到:1天19小时前
加入:2016-04-27 07:07
确认一下闪光的配置

确认一下闪光的配置,比如闪电大小和页大小配置正确。
另外,在调试模式下,可以通过断点的方式,看看是在什么地方出错的。

如果DEVELOPMENT_DEBUG开着的,遇到程序死掉,一般都会跑进HardFault_HandlerC函数。
可以看看保存的PC / LR是在哪里出问题的。

你们Kinson
离线
最后看到:4年11个月前
加入:2016-09-07 08:14
如果DEVELOPMENT_DEBUG开着的,遇到程序死掉

如果DEVELOPMENT_DEBUG开着的,遇到程序死掉,一般都会跑进HardFault_HandlerC函数。
可以看看保存的PC / LR是在哪里出问题的。
/ /没错,就是开了DEVELOPMENT_DEBUG。”PC / LR”这个是什么意思?

Gongyu_Dialog
离线
最后看到:1天19小时前
加入:2016-04-27 07:07
空白HardFault_HandlerC

void HardFault_HandlerC(unsigned long *hardfault_args)

如果(DEVELOPMENT_DEBUG)

*(volatile unsigned long *)(STATUS_BASE + 0x14) = hardfault_args[5];/ / LR
*(volatile unsigned long *)(STATUS_BASE + 0x18) = hardfault_args[6];/ /电脑

.........

你们Kinson
离线
最后看到:4年11个月前
加入:2016-09-07 08:14
开启#定义CFG_DEVELOPMENT

开启# define CFG_DEVELOPMENT_DEBUG后,操作flash,程序跑到空NMI_HandlerC(无符号长* hardfault_args)里面的”“如果((GetWord16 (SYS_STAT_REG) & DBG_IS_UP) = = DBG_IS_UP) __asm(“BKPT # 0 \ n”);“
谢谢