<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Recently Active Topics]]></title><description><![CDATA[A list of topics that have been active within the past 24 hours]]></description><link>http://www.freqchip.net:4567/recent</link><generator>RSS for Node</generator><lastBuildDate>Sun, 16 Aug 2026 19:11:18 GMT</lastBuildDate><atom:link href="http://www.freqchip.net:4567/recent.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 11 Aug 2026 09:36:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[FR8003A的flash寿命]]></title><description><![CDATA[@akajqq 支持10万次擦除
]]></description><link>http://www.freqchip.net:4567/topic/1884/fr8003a的flash寿命</link><guid isPermaLink="true">http://www.freqchip.net:4567/topic/1884/fr8003a的flash寿命</guid><dc:creator><![CDATA[ZR]]></dc:creator><pubDate>Mon, 10 Aug 2026 08:04:27 GMT</pubDate></item><item><title><![CDATA[使用8016HD进行开发]]></title><description><![CDATA[遇到同样的问题，帮顶
]]></description><link>http://www.freqchip.net:4567/topic/1879/使用8016hd进行开发</link><guid isPermaLink="true">http://www.freqchip.net:4567/topic/1879/使用8016hd进行开发</guid><dc:creator><![CDATA[lss6378]]></dc:creator><pubDate>Wed, 05 Aug 2026 10:10:17 GMT</pubDate></item><item><title><![CDATA[FR8008GP-U RTT]]></title><description><![CDATA[可以打印但是有问题，让芯片不进睡眠也要连接很多次，不知道为什么
]]></description><link>http://www.freqchip.net:4567/topic/1878/fr8008gp-u-rtt</link><guid isPermaLink="true">http://www.freqchip.net:4567/topic/1878/fr8008gp-u-rtt</guid><dc:creator><![CDATA[ly01]]></dc:creator><pubDate>Wed, 05 Aug 2026 07:50:06 GMT</pubDate></item><item><title><![CDATA[如何与需要PIN码的蓝牙从机通信]]></title><description><![CDATA[@akajqq
case GAP_SEC_EVT_PIN_CODE_REQ:
{
uint8_t conidx = p_event-&gt;param.pin_code_req.conidx;
uint8_t tk_type = p_event-&gt;param.pin_code_req.tk_type;
LOG_INFO(app_tag, &quot;PIN requested, conidx=%d, type=%d\r\n&quot;,
         conidx, tk_type);

    gap_security_send_pairing_password(conidx, 123456);

}
break;
]]></description><link>http://www.freqchip.net:4567/topic/1875/如何与需要pin码的蓝牙从机通信</link><guid isPermaLink="true">http://www.freqchip.net:4567/topic/1875/如何与需要pin码的蓝牙从机通信</guid><dc:creator><![CDATA[ZR]]></dc:creator><pubDate>Wed, 29 Jul 2026 07:56:00 GMT</pubDate></item><item><title><![CDATA[FR8008GP-U LVGL的例程在哪？]]></title><description><![CDATA[@yjx
https://gitee.com/a18562560220/freqchip_faq/tree/master/03外设驱动参考资料+例程/800x-u
]]></description><link>http://www.freqchip.net:4567/topic/1876/fr8008gp-u-lvgl的例程在哪</link><guid isPermaLink="true">http://www.freqchip.net:4567/topic/1876/fr8008gp-u-lvgl的例程在哪</guid><dc:creator><![CDATA[ZR]]></dc:creator><pubDate>Tue, 28 Jul 2026 01:40:45 GMT</pubDate></item><item><title><![CDATA[串口中断发送]]></title><description><![CDATA[@wkl 
看下外设例程
]]></description><link>http://www.freqchip.net:4567/topic/1874/串口中断发送</link><guid isPermaLink="true">http://www.freqchip.net:4567/topic/1874/串口中断发送</guid><dc:creator><![CDATA[ZR]]></dc:creator><pubDate>Tue, 28 Jul 2026 01:36:20 GMT</pubDate></item><item><title><![CDATA[有官方的git地址嘛]]></title><description><![CDATA[@wkl SDK直接在官网下载就可以
]]></description><link>http://www.freqchip.net:4567/topic/1873/有官方的git地址嘛</link><guid isPermaLink="true">http://www.freqchip.net:4567/topic/1873/有官方的git地址嘛</guid><dc:creator><![CDATA[ZR]]></dc:creator><pubDate>Sun, 26 Jul 2026 15:26:42 GMT</pubDate></item><item><title><![CDATA[我需要用FR8008GP的flash，但是只能读取不能擦除并写入，根据论坛：FR8000操作flash的范例直接复制到程式中,发现程式卡在erase_retu_num = flash_erase(FLASH_ADDR0_0X101000, FLASH_SECTOR_SIZE);中出不去]]></title><description><![CDATA[大概率是FR8008GP flash容量配置错误导致擦除异常，应是0x00800000；；
]]></description><link>http://www.freqchip.net:4567/topic/1533/我需要用fr8008gp的flash-但是只能读取不能擦除并写入-根据论坛-fr8000操作flash的范例直接复制到程式中-发现程式卡在erase_retu_num-flash_erase-flash_addr0_0x101000-flash_sector_size-中出不去</link><guid isPermaLink="true">http://www.freqchip.net:4567/topic/1533/我需要用fr8008gp的flash-但是只能读取不能擦除并写入-根据论坛-fr8000操作flash的范例直接复制到程式中-发现程式卡在erase_retu_num-flash_erase-flash_addr0_0x101000-flash_sector_size-中出不去</guid><dc:creator><![CDATA[阳光下的冰淇淋]]></dc:creator><pubDate>Fri, 24 Jul 2026 07:20:42 GMT</pubDate></item><item><title><![CDATA[低功耗模式电流大，可能是什么原因]]></title><description><![CDATA[@010101 你可以用你程序，在我们开发板上测试一下
]]></description><link>http://www.freqchip.net:4567/topic/1870/低功耗模式电流大-可能是什么原因</link><guid isPermaLink="true">http://www.freqchip.net:4567/topic/1870/低功耗模式电流大-可能是什么原因</guid><dc:creator><![CDATA[ZR]]></dc:creator><pubDate>Wed, 22 Jul 2026 01:43:42 GMT</pubDate></item><item><title><![CDATA[音频示例编译的时候为什么会显示找i不到这个]]></title><description><![CDATA[@橙子味汽水 keil可能没加进去，你找下这个.c文件，添加进去试下
]]></description><link>http://www.freqchip.net:4567/topic/1869/音频示例编译的时候为什么会显示找i不到这个</link><guid isPermaLink="true">http://www.freqchip.net:4567/topic/1869/音频示例编译的时候为什么会显示找i不到这个</guid><dc:creator><![CDATA[ZR]]></dc:creator><pubDate>Fri, 17 Jul 2026 10:08:28 GMT</pubDate></item><item><title><![CDATA[可以下载的时候直接把音频烧录到flash中吗]]></title><description><![CDATA[@summer 
]]></description><link>http://www.freqchip.net:4567/topic/1871/可以下载的时候直接把音频烧录到flash中吗</link><guid isPermaLink="true">http://www.freqchip.net:4567/topic/1871/可以下载的时候直接把音频烧录到flash中吗</guid><dc:creator><![CDATA[ZR]]></dc:creator><pubDate>Fri, 17 Jul 2026 10:07:36 GMT</pubDate></item><item><title><![CDATA[修改FLASH_CAPACITY地址后导致配对卡死]]></title><description><![CDATA[@ding56239
// &lt;h&gt; FLASH Configuration
// &lt;o&gt; FLASH_CAPACITY
// &lt;i&gt; Internal Flash capacity selection, Default: 4Mb
// &lt;0x02000000=&gt; 128Mb
// &lt;0x01000000=&gt; 64Mb
// &lt;0x00800000=&gt; 32Mb
// &lt;0x00100000=&gt; 8Mb
// &lt;0x00080000=&gt; 4Mb
// &lt;0x00040000=&gt; 2Mb
#define FLASH_CAPACITY 0x02000000
#define BLE_STACK_KEY_STORAGE_OFFSET (FLASH_CAPACITY-0x1000)
#define BLE_REMOTE_SERVICE_SAVE_ADDR (FLASH_CAPACITY-0x2000)
#define BLE_BONDING_INFO_SAVE_ADDR (FLASH_CAPACITY-0x3000)
]]></description><link>http://www.freqchip.net:4567/topic/1868/修改flash_capacity地址后导致配对卡死</link><guid isPermaLink="true">http://www.freqchip.net:4567/topic/1868/修改flash_capacity地址后导致配对卡死</guid><dc:creator><![CDATA[Mars]]></dc:creator><pubDate>Wed, 15 Jul 2026 05:42:04 GMT</pubDate></item><item><title><![CDATA[多从机开机，然后主机上电开机多连，好像就容易出现协议栈错误gatt_api.c 193]]></title><description><![CDATA[应该是解决问题了，多连接的时候事件回调中拿到p_event-&gt;param.master_encrypt_conidx，和自己维护的连接slot不匹配，调用内部gatt函数时出现错乱就报这个错了，GATT 事件入口统一拦截无效连接似乎就没出现了
]]></description><link>http://www.freqchip.net:4567/topic/1866/多从机开机-然后主机上电开机多连-好像就容易出现协议栈错误gatt_api-c-193</link><guid isPermaLink="true">http://www.freqchip.net:4567/topic/1866/多从机开机-然后主机上电开机多连-好像就容易出现协议栈错误gatt_api-c-193</guid><dc:creator><![CDATA[MR灬CHEN]]></dc:creator><pubDate>Tue, 14 Jul 2026 10:36:00 GMT</pubDate></item><item><title><![CDATA[FR8008G-U 蓝牙和LVGL同时运行 LVGL使用外部PSRAM运行比较卡]]></title><description><![CDATA[<p>FR8008G-U 蓝牙和LVGL同时跑，由于蓝牙协议栈基本上把内部RAM用完了，所以LVGL只能在PSRAM上运行，但是在PSRAM上运行比在内部RAM运行慢，我测试了下慢了将近6倍，请问PSRAM还有没有提升空间？或者还有其他办法解决上面LVGL和蓝牙同时跑内部RAM用完的问题，以下是我的PSRAM配置pmu_ioldosw_ctrl(true);</p>
<pre><code>__SYSTEM_GPIO_CLK_ENABLE();
system_regs-&gt;mdm_qspi_cfg.qspi_ref_128m_en = 1; // configure qspi reference clock to 128MHz
system_regs-&gt;mdm_qspi_cfg.qspi_ref_clk_sel = 1; // qspi is used for internal flash, set its reference clock to 96MHz
// system_enable_internal_flash_q_read(0x01);
system_set_internal_flash_clock_div(0);

// configure PSRAM pin and init PSRAM
system_set_port_mux(GPIO_PORT_C, GPIO_BIT_0, PORTC0_FUNC_QSPI0_IO3);
system_set_port_mux(GPIO_PORT_C, GPIO_BIT_1, PORTC1_FUNC_QSPI0_SCLK0);
system_set_port_mux(GPIO_PORT_C, GPIO_BIT_2, PORTC2_FUNC_QSPI0_CSN0);
system_set_port_mux(GPIO_PORT_C, GPIO_BIT_3, PORTC3_FUNC_QSPI0_IO1);
system_set_port_mux(GPIO_PORT_C, GPIO_BIT_4, PORTC4_FUNC_QSPI0_IO2);
system_set_port_mux(GPIO_PORT_C, GPIO_BIT_5, PORTC5_FUNC_QSPI0_IO0);
psram_init(PSRAM_CLK_SEL_COREH_96M);
</code></pre>
<p>#include &lt;stdint.h&gt;<br />
#include &lt;string.h&gt;</p>
<p>#include &quot;plf.h&quot;<br />
#include &quot;driver_qspi.h&quot;<br />
#include &quot;driver_psram.h&quot;<br />
#include &quot;driver_system.h&quot;<br />
#include &quot;driver_pmu.h&quot;<br />
#include &quot;driver_cache.h&quot;</p>
<p>#include &quot;co_printf.h&quot;</p>
<p>#ifdef INLINE<br />
#undef INLINE<br />
#endif<br />
#define INLINE</p>
<p>#define PSRAM_ENABLE_Q_MODE             1<br />
#define PSRAM_CLK_DIV_SEL               QSPI_BAUDRATE_DIV_2<br />
#define PSRAM_BASE                      QSPI1_DAC_ADDRESS</p>
<p>#define PSRAM_READ_IDENTIFICATION       0x9F</p>
<p>#define PSRAM_READ_OPCODE               0x03<br />
#define PSRAM_FAST_READ_OPCODE          0x0B<br />
#define PSRAM_FAST_QUAL_READ_OPCODE     0xEB</p>
<p>#define PSRAM_PAGE_PROGRAM_OPCODE       0x02<br />
#define PSRAM_PAGE_QUAL_PROGRAM_OPCODE  0x38</p>
<p>#define PSRAM_ENTER_QUAD_MODE_OPCODE    0x35<br />
#define PSRAM_EXIT_QUAD_MODE_OPCODE     0xF5</p>
<p>#define PSRAM_RESET_ENABLE_OPCODE       0x66<br />
#define PSRAM_RESET_OPCODE              0x99</p>
<p>#define QSPI0_STIG_MAX_SINGLE_LEN       8<br />
#define QSPI0_STIG_BANK_DEPTH           128</p>
<p>#define QSPI0_HIGH_SPEED                1<br />
uint8_t psram_delay = 0xFF;<br />
static const struct qspi_stig_reg_t psram_read_id_cmd = {<br />
.enable_bank = 0,<br />
.dummy_cycles = 0,<br />
.write_bytes = 0,<br />
.enable_write = 0,<br />
.addr_bytes = 0,<br />
.enable_mode = 0,<br />
.enable_cmd_addr = 0,<br />
.read_bytes = 3,<br />
.enable_read = 1,<br />
.opcode = PSRAM_READ_IDENTIFICATION,<br />
};</p>
<p>static const struct qspi_stig_reg_t enter_quad_mode_cmd = {<br />
.enable_bank = 0,<br />
.dummy_cycles = 0,<br />
.write_bytes = 0,<br />
.enable_write = 0,<br />
.addr_bytes = 0,<br />
.enable_mode = 0,<br />
.enable_cmd_addr = 0,<br />
.read_bytes = 0,<br />
.enable_read = 0,<br />
.opcode = PSRAM_ENTER_QUAD_MODE_OPCODE,<br />
};</p>
<p>static const struct qspi_stig_reg_t reset_enable_cmd = {<br />
.enable_bank = 0,<br />
.dummy_cycles = 0,<br />
.write_bytes = 0,<br />
.enable_write = 0,<br />
.addr_bytes = 0,<br />
.enable_mode = 0,<br />
.enable_cmd_addr = 0,<br />
.read_bytes = 0,<br />
.enable_read = 0,<br />
.opcode = PSRAM_RESET_ENABLE_OPCODE,<br />
};</p>
<p>static const struct qspi_stig_reg_t reset_cmd = {<br />
.enable_bank = 0,<br />
.dummy_cycles = 0,<br />
.write_bytes = 0,<br />
.enable_write = 0,<br />
.addr_bytes = 0,<br />
.enable_mode = 0,<br />
.enable_cmd_addr = 0,<br />
.read_bytes = 0,<br />
.enable_read = 0,<br />
.opcode = PSRAM_RESET_OPCODE,<br />
};</p>
<p>//static const struct qspi_stig_reg_t exit_quad_mode_cmd = {<br />
//    .enable_bank = 0,<br />
//    .dummy_cycles = 0,<br />
//    .write_bytes = 0,<br />
//    .enable_write = 0,<br />
//    .addr_bytes = 0,<br />
//    .enable_mode = 0,<br />
//    .enable_cmd_addr = 0,<br />
//    .read_bytes = 0,<br />
//    .enable_read = 0,<br />
//    .opcode = PSRAM_EXIT_QUAD_MODE_OPCODE,<br />
//};</p>
<p>volatile struct qspi_regs_t *qspi0_ctrl = (volatile struct qspi_regs_t *)QSPI0_APB_BASE;</p>
<p>INLINE void qspi0_cfg_set_enable(uint8_t en)<br />
{<br />
qspi0_ctrl-&gt;config.enable = en;<br />
}</p>
<p>INLINE void qspi0_cfg_set_cpol(uint8_t high)<br />
{<br />
qspi0_ctrl-&gt;config.cpol = high;<br />
}</p>
<p>INLINE void qspi0_cfg_set_cpha(uint8_t rising)<br />
{<br />
qspi0_ctrl-&gt;config.cpha = rising;<br />
}</p>
<p>INLINE void qspi0_cfg_set_hold(uint8_t hold)<br />
{<br />
qspi0_ctrl-&gt;config.hold_pin = hold;<br />
}</p>
<p>INLINE void qspi0_cfg_set_reset(uint8_t reset)<br />
{<br />
qspi0_ctrl-&gt;config.reset_pin = reset;<br />
}</p>
<p>INLINE void qspi0_cfg_set_reset_sel(uint8_t dedicated)<br />
{<br />
qspi0_ctrl-&gt;config.reset_pin_conf = dedicated;<br />
}</p>
<p>INLINE void qspi0_cfg_set_enable_dac(uint8_t en)<br />
{<br />
qspi0_ctrl-&gt;config.enable_DAC = en;<br />
}</p>
<p>INLINE void qspi0_cfg_set_enable_legacy(uint8_t en)<br />
{<br />
qspi0_ctrl-&gt;config.enable_legacy = en;<br />
}</p>
<p>INLINE void qspi0_cfg_set_write_protect(uint8_t wp)<br />
{<br />
qspi0_ctrl-&gt;config.write_en_pin = wp;<br />
}</p>
<p>INLINE void qspi0_cfg_set_enable_remap(uint8_t en)<br />
{<br />
qspi0_ctrl-&gt;config.enable_AHB_remap = en;<br />
}</p>
<p>static void qspi0_cfg_set_baudrate(uint8_t baudrate);</p>
<p>INLINE void qspi0_cfg_set_enable_AHB_decoder(uint8_t en)<br />
{<br />
qspi0_ctrl-&gt;config.enable_AHB_decoder = en;<br />
}</p>
<p>INLINE int qspi0_is_busy(void)<br />
{<br />
return (qspi0_ctrl-&gt;config.status == 0);<br />
}</p>
<p>INLINE void qspi0_read_set_opcode(uint8_t opcode)<br />
{<br />
qspi0_ctrl-&gt;read_conf.opcode_no_XIP = opcode;<br />
}</p>
<p>INLINE void qspi0_read_set_instruction_type(uint8_t type)<br />
{<br />
qspi0_ctrl-&gt;read_conf.instruction_type = type;<br />
}</p>
<p>INLINE void qspi0_read_set_address_type(uint8_t type)<br />
{<br />
qspi0_ctrl-&gt;read_conf.addr_type = type;<br />
}</p>
<p>INLINE void qspi0_read_set_data_type(uint8_t type)<br />
{<br />
qspi0_ctrl-&gt;read_conf.data_type = type;<br />
}</p>
<p>INLINE void qspi0_read_set_mode_en(uint8_t en)<br />
{<br />
qspi0_ctrl-&gt;read_conf.enable_mode = en;<br />
}</p>
<p>INLINE void qspi0_read_set_dummy_cycles(uint8_t cycles)<br />
{<br />
qspi0_ctrl-&gt;read_conf.dummy_cycles = cycles;<br />
}</p>
<p>INLINE void qspi0_write_set_opcode(uint8_t opcode)<br />
{<br />
qspi0_ctrl-&gt;write_conf.opcode = opcode;<br />
}</p>
<p>INLINE void qspi0_write_set_wel_dis(uint8_t disable)<br />
{<br />
qspi0_ctrl-&gt;write_conf.disable_WEL = disable;<br />
}</p>
<p>INLINE void qspi0_write_set_address_type(uint8_t type)<br />
{<br />
qspi0_ctrl-&gt;write_conf.addr_type = type;<br />
}</p>
<p>INLINE void qspi0_write_set_data_type(uint8_t type)<br />
{<br />
qspi0_ctrl-&gt;write_conf.data_type = type;<br />
}</p>
<p>INLINE void qspi0_write_set_dummy_cycles(uint8_t cycles)<br />
{<br />
qspi0_ctrl-&gt;write_conf.dummy_cycles = cycles;<br />
}</p>
<p>INLINE void qspi0_set_remap_address(uint32_t address)<br />
{<br />
qspi0_ctrl-&gt;remap_address = address;<br />
}</p>
<p>INLINE void qspi0_set_mode_bit(uint8_t mode)<br />
{<br />
qspi0_ctrl-&gt;mode_bits = (uint32_t)mode;<br />
}</p>
<p>INLINE void qspi0_poll_set_opcode(uint8_t opcode)<br />
{<br />
qspi0_ctrl-&gt;poll_cfg.opcode_poll = opcode;<br />
}</p>
<p>INLINE void qspi0_poll_set_bit_index(uint8_t index)<br />
{<br />
qspi0_ctrl-&gt;poll_cfg.poll_bit_index = index;<br />
}</p>
<p>INLINE void qspi0_poll_set_polarity(uint8_t pol)<br />
{<br />
qspi0_ctrl-&gt;poll_cfg.poll_polarity = pol;<br />
}</p>
<p>INLINE void qspi0_poll_set_disable(uint8_t dis)<br />
{<br />
qspi0_ctrl-&gt;poll_cfg.disable_poll = dis;<br />
}</p>
<p>INLINE void qspi0_poll_set_expire(uint8_t en, uint32_t duration)<br />
{<br />
qspi0_ctrl-&gt;poll_cfg.enable_expiration = en;<br />
if(en) {<br />
qspi0_ctrl-&gt;poll_expiration = duration;<br />
}<br />
}</p>
<p>INLINE void qspi0_poll_set_poll_count(uint8_t count)<br />
{<br />
qspi0_ctrl-&gt;poll_cfg.poll_count = count;<br />
}</p>
<p>INLINE void qspi0_poll_set_poll_delay(uint8_t delay)<br />
{<br />
qspi0_ctrl-&gt;poll_cfg.poll_repetition_delay = delay;<br />
}</p>
<p>INLINE void qspi0_set_cmd_addr(uint32_t addr)<br />
{<br />
qspi0_ctrl-&gt;cmd_address = addr;<br />
}</p>
<p>INLINE void qspi0_stig_set_opcode(uint8_t opcode)<br />
{<br />
qspi0_ctrl-&gt;cmd_ctrl.opcode = opcode;<br />
}</p>
<p>INLINE void qspi0_stig_set_read_en(uint8_t en)<br />
{<br />
qspi0_ctrl-&gt;cmd_ctrl.enable_read = en;<br />
}</p>
<p>INLINE void qspi0_stig_set_read_bytes(uint8_t bytes)<br />
{<br />
qspi0_ctrl-&gt;cmd_ctrl.read_bytes = bytes;<br />
}</p>
<p>INLINE void qspi0_stig_set_addr(uint8_t en, uint8_t bytes, uint32_t addr)<br />
{<br />
qspi0_ctrl-&gt;cmd_ctrl.enable_cmd_addr = en;<br />
qspi0_ctrl-&gt;cmd_ctrl.addr_bytes = bytes;<br />
if(en) {<br />
qspi0_ctrl-&gt;cmd_address = addr;<br />
}<br />
}</p>
<p>INLINE void qspi0_stig_set_mode_en(uint8_t en)<br />
{<br />
qspi0_ctrl-&gt;cmd_ctrl.enable_mode = en;<br />
}</p>
<p>INLINE void qspi0_stig_set_write_en(uint8_t en)<br />
{<br />
qspi0_ctrl-&gt;cmd_ctrl.enable_write = en;<br />
}</p>
<p>INLINE void qspi0_stig_set_write_bytes(uint8_t bytes)<br />
{<br />
qspi0_ctrl-&gt;cmd_ctrl.write_bytes = bytes;<br />
}</p>
<p>INLINE void qspi0_stig_set_dummy_cycles(uint8_t cycles)<br />
{<br />
qspi0_ctrl-&gt;cmd_ctrl.dummy_cycles = cycles;<br />
}</p>
<p>INLINE void qspi0_stig_set_mem_bank(uint8_t en, uint8_t bytes)<br />
{<br />
qspi0_ctrl-&gt;cmd_ctrl.enable_bank = en;<br />
if(en) {<br />
qspi0_ctrl-&gt;cmd_ctrl_mem.mem_bank_req_bytes = bytes;<br />
}<br />
}</p>
<p>static void qspi0_cfg_set_baudrate(uint8_t baudrate)<br />
{<br />
qspi0_ctrl-&gt;config.baud_rate = baudrate;<br />
}</p>
<p>static int qspi0_stig_cmd(struct qspi_stig_reg_t cmd, enum qspi_stig_cmd_type_t type, int len, uint8_t *buffer)<br />
{<br />
uint32_t tmp_u32[2];<br />
uint8_t *tmp_u8 = (uint8_t *)tmp_u32;</p>
<pre><code>if(type == QSPI_STIG_CMD_BANK_READ) {
    if(QSPI0_STIG_BANK_DEPTH &lt; len) {
        return -1;
    }
}
else {
    if(QSPI0_STIG_MAX_SINGLE_LEN &lt; len) {
        return -1;
    }
}

while(qspi0_is_busy());

if(type == QSPI_STIG_CMD_EXE) {
    qspi0_ctrl-&gt;cmd_ctrl = cmd;
    qspi0_ctrl-&gt;cmd_ctrl.execute = 1;
    while(qspi0_ctrl-&gt;cmd_ctrl.progress_status);
}
else {
    if(type == QSPI_STIG_CMD_WRITE) {
        memcpy(tmp_u8, buffer, len);
        qspi0_ctrl-&gt;write_data_L = tmp_u32[0];
        qspi0_ctrl-&gt;write_data_H = tmp_u32[1];
        cmd.write_bytes = len - 1;
        qspi0_ctrl-&gt;cmd_ctrl = cmd;
        qspi0_ctrl-&gt;cmd_ctrl.execute = 1;
        while(qspi0_ctrl-&gt;cmd_ctrl.progress_status);
    }
    else {
        cmd.read_bytes = len - 1;
        qspi0_ctrl-&gt;cmd_ctrl = cmd;
        qspi0_ctrl-&gt;cmd_ctrl.execute = 1;
        while(qspi0_ctrl-&gt;cmd_ctrl.progress_status);
        if(type == QSPI_STIG_CMD_READ) {
            tmp_u32[0] = qspi0_ctrl-&gt;read_data_L;
            tmp_u32[1] = qspi0_ctrl-&gt;read_data_H;
            //co_printf(&quot;READ_L: 0x%08x, READ_H: 0x%08x.\r\n&quot;, tmp_u32[0], tmp_u32[1]);
            memcpy(buffer, tmp_u8, len);
        }
        else {
            //TBD, BANK READ
        }
    }
}

return 0;
</code></pre>
<p>}</p>
<p>void psram_enter_quad(void)<br />
{<br />
qspi0_stig_cmd(enter_quad_mode_cmd, QSPI_STIG_CMD_EXE, 0, NULL);<br />
}</p>
<p>uint32_t psram_read_id(void)<br />
{<br />
uint32_t flash_id;<br />
qspi0_stig_cmd(psram_read_id_cmd, QSPI_STIG_CMD_READ,  3, (uint8_t *)&amp;flash_id);<br />
return (flash_id&amp;0xffffff);<br />
}</p>
<p>static void psram_controller_init(uint16_t page_boundary)<br />
{<br />
while(qspi0_is_busy());</p>
<p>#if PSRAM_ENABLE_Q_MODE == 1<br />
qspi0_read_set_opcode(PSRAM_FAST_READ_OPCODE);<br />
qspi0_read_set_instruction_type(QSPI_WIRE_TYPE_QIO);<br />
qspi0_read_set_address_type(QSPI_WIRE_TYPE_QIO);<br />
qspi0_read_set_data_type(QSPI_WIRE_TYPE_QIO);<br />
qspi0_read_set_dummy_cycles(4);<br />
qspi0_read_set_mode_en(0);<br />
qspi0_set_mode_bit(0);//8 bits data after addr</p>
<pre><code>qspi0_write_set_opcode(PSRAM_PAGE_QUAL_PROGRAM_OPCODE);
qspi0_write_set_address_type(QSPI_WIRE_TYPE_QIO);
qspi0_write_set_data_type(QSPI_WIRE_TYPE_QIO);
qspi0_write_set_dummy_cycles(0);
</code></pre>
<p>#else<br />
qspi0_read_set_opcode(PSRAM_FAST_QUAL_READ_OPCODE);	<br />
qspi0_read_set_instruction_type(QSPI_WIRE_TYPE_STAND);<br />
qspi0_read_set_address_type(QSPI_WIRE_TYPE_QIO);<br />
qspi0_read_set_data_type(QSPI_WIRE_TYPE_QIO);<br />
qspi0_read_set_dummy_cycles(6);<br />
qspi0_read_set_mode_en(0);<br />
qspi0_set_mode_bit(0);//8 bits data after addr</p>
<pre><code>qspi0_write_set_opcode(PSRAM_PAGE_QUAL_PROGRAM_OPCODE);
qspi0_write_set_address_type(QSPI_WIRE_TYPE_QIO);
qspi0_write_set_data_type(QSPI_WIRE_TYPE_QIO);
qspi0_write_set_dummy_cycles(0);
</code></pre>
<p>#endif</p>
<pre><code>//init configuration register
qspi0_cfg_set_cpol(0);
qspi0_cfg_set_cpha(0);
qspi0_cfg_set_enable_dac(1);
qspi0_cfg_set_enable_legacy(0);
qspi0_cfg_set_enable_remap(1);
</code></pre>
<p>#if QSPI0_HIGH_SPEED<br />
qspi0_cfg_set_baudrate(PSRAM_CLK_DIV_SEL);<br />
#else<br />
qspi0_cfg_set_baudrate(QSPI_BAUDRATE_DIV_32);<br />
#endif<br />
qspi0_cfg_set_enable_AHB_decoder(1);<br />
qspi0_write_set_wel_dis(1);<br />
qspi0_poll_set_disable(1);</p>
<p>#if QSPI0_HIGH_SPEED<br />
qspi0_ctrl-&gt;read_cap.delay_capture = 3;<br />
#else<br />
qspi0_ctrl-&gt;read_cap.delay_capture = 0;<br />
#endif<br />
qspi0_ctrl-&gt;read_cap.enable_loopback_clk = 1;<br />
qspi0_ctrl-&gt;delay.sel_start_offset = 2;<br />
qspi0_ctrl-&gt;delay.sel_end_offset = 2;<br />
qspi0_ctrl-&gt;delay.sel_dessert = 2;<br />
qspi0_ctrl-&gt;cs_ctrl.rd_brk_en = 1;<br />
qspi0_ctrl-&gt;cs_ctrl.disable_cs_after_first_byte = 1;<br />
qspi0_ctrl-&gt;cs_ctrl.page_boundary_protect_en = 1;<br />
qspi0_ctrl-&gt;cs_ctrl.page_boundary = page_boundary;<br />
qspi0_set_remap_address(QSPI1_DAC_ADDRESS);<br />
qspi0_cfg_set_enable(1);<br />
}</p>
<p>void psram_cache_enable(void)<br />
{<br />
__CACHE_FLUSH(CACHE);<br />
__CACHE_WR_MODE_SET(CACHE, CACHE_WR_WRITE_THROUGH);<br />
__CACHE_ADDR_RANGEx_BANK_SET(CACHE, 0, 0x0000);<br />
__CACHE_ADDR_RANGEx_MASK_SET(CACHE, 0, 0x0000);<br />
__CACHE_ADDR_RANGEx_POL_SET(CACHE, 0, CACHE_POL_CACHABLE);<br />
__CACHE_ADDR_RANGEx_ENABLE(CACHE, 0);<br />
__CACHE_ENABLE(CACHE);<br />
}</p>
<p>bool psram_init(enum psram_clk_sel_t clk_sel)<br />
{<br />
uint32_t ref_clk;</p>
<pre><code>if (clk_sel &gt;= PSRAM_CLK_SEL_MAX) {
    return false;
}

switch (clk_sel) {
    case PSRAM_CLK_SEL_COREH_48M:
        system_regs-&gt;mdm_qspi_cfg.qspi0_ref_clk_sel = 0;
        ref_clk = 48000000;
        break;
    case PSRAM_CLK_SEL_COREH_96M:
        system_regs-&gt;mdm_qspi_cfg.qspi0_ref_clk_sel = 1;
        ref_clk = 96000000;
        break;      
    default:
        return false;
}
system_regs-&gt;mdm_qspi_cfg.qspi0_ref_clk_en=1;
system_regs-&gt;mdm_qspi_cfg.qspi0_hclk_en=1;
system_regs-&gt;mdm_qspi_cfg.qspi0_io_ctl_oen=0;

if(psram_delay == 0xFF)
{
    qspi0_stig_cmd(reset_enable_cmd, QSPI_STIG_CMD_EXE, 0, NULL);
    qspi0_stig_cmd(reset_cmd, QSPI_STIG_CMD_EXE, 0, NULL);
</code></pre>
<p>#if PSRAM_ENABLE_Q_MODE == 1<br />
psram_enter_quad();<br />
#endif  // PSRAM_ENABLE_Q_MODE == 1<br />
}</p>
<pre><code>/* about 100 bytes can be transmitted during 8us when QSPI clock is 24MHz */
ref_clk /= ((PSRAM_CLK_DIV_SEL+1) * 2);
uint32_t bytes = ref_clk / 240000;
uint32_t boundary_cfg = 1 &lt;&lt; (31 - __CLZ(bytes));
if (boundary_cfg &gt;= 0x100) {
    boundary_cfg = 0x100;
}
psram_controller_init(boundary_cfg);

if(psram_delay != 0xFF)
{
    qspi0_ctrl-&gt;read_cap.delay_capture = psram_delay;
}
else
{
    /* detect read capture delay configuration */
    uint8_t delay_lower, delay_upper, index;
    *(volatile uint32_t *)(PSRAM_BASE) = 0x5a5a5a5a;
    while(qspi0_is_busy());

    for (index = 0; index &lt; 16; index++) {
        while(qspi0_is_busy());
        qspi0_ctrl-&gt;read_cap.delay_capture = index;
        if (*(volatile uint32_t *)(PSRAM_BASE) == 0x5a5a5a5a) {
            break;
        }
    }
    if (index == 16) {
        system_regs-&gt;mdm_qspi_cfg.qspi0_ref_clk_en=0;
        return false;
    }
    else {
        delay_lower = index;
    }
    for (; index &lt; 16; index++) {
        while(qspi0_is_busy());        
        qspi0_ctrl-&gt;read_cap.delay_capture = index;
        delay_upper = index;
        if (*(volatile uint32_t *)(PSRAM_BASE) != 0x5a5a5a5a) {
            break;
        }
    }
    
    psram_delay = ((delay_lower + delay_upper)&gt;&gt;1);
    while(qspi0_is_busy());
    qspi0_ctrl-&gt;read_cap.delay_capture = psram_delay;      
}

psram_cache_enable();

return true;
</code></pre>
<p>}</p>
]]></description><link>http://www.freqchip.net:4567/topic/1886/fr8008g-u-蓝牙和lvgl同时运行-lvgl使用外部psram运行比较卡</link><guid isPermaLink="true">http://www.freqchip.net:4567/topic/1886/fr8008g-u-蓝牙和lvgl同时运行-lvgl使用外部psram运行比较卡</guid><dc:creator><![CDATA[hejun]]></dc:creator><pubDate>Tue, 11 Aug 2026 09:36:05 GMT</pubDate></item><item><title><![CDATA[关于bond存储的问题]]></title><description><![CDATA[<p>已经gap_bond_manager_init初始化调用，完成bond成功后，但系统每次重启调用gap_security_get_bond_status都会false，是什么原因？</p>
]]></description><link>http://www.freqchip.net:4567/topic/1885/关于bond存储的问题</link><guid isPermaLink="true">http://www.freqchip.net:4567/topic/1885/关于bond存储的问题</guid><dc:creator><![CDATA[lcy]]></dc:creator><pubDate>Sun, 09 Aug 2026 04:22:50 GMT</pubDate></item><item><title><![CDATA[FR8003A用在RS485应用的发送问题]]></title><description><![CDATA[<p>我用这个芯片做蓝牙转RS485，没看到这个芯片的串口TC中断是怎么配置的，是否没有TC中断，现在用TXE中断，发送的时候会少最后一字节，怎么解决</p>
]]></description><link>http://www.freqchip.net:4567/topic/1883/fr8003a用在rs485应用的发送问题</link><guid isPermaLink="true">http://www.freqchip.net:4567/topic/1883/fr8003a用在rs485应用的发送问题</guid><dc:creator><![CDATA[akajqq]]></dc:creator><pubDate>Sat, 08 Aug 2026 03:04:17 GMT</pubDate></item><item><title><![CDATA[请问下FR8003可以驱动LED点阵屏吗]]></title><description><![CDATA[<p>请问下FR8003可以驱动LED点阵屏吗</p>
]]></description><link>http://www.freqchip.net:4567/topic/1882/请问下fr8003可以驱动led点阵屏吗</link><guid isPermaLink="true">http://www.freqchip.net:4567/topic/1882/请问下fr8003可以驱动led点阵屏吗</guid><dc:creator><![CDATA[xls]]></dc:creator><pubDate>Fri, 07 Aug 2026 03:08:41 GMT</pubDate></item><item><title><![CDATA[使用FR8008GP-U LVGLDemo 创建控件反复重启]]></title><description><![CDATA[<p>使用FR8008GP-U LVGLDemo创建控件反复重启<br />
工程：fr8000u_sdk\examples\evm\gui_demo_8_1_BLE<br />
修改部分：将蓝牙，PSRAM部分和触摸都去掉了，初始化LVGL和LCD7789驱动都没问题，只要我创建LVGL控件，芯片就会复位</p>
<p>屏蔽掉创建按键就不会复位了，是不是栈和堆溢出，如果是在哪设置呢</p>
<p>static void my_disp_flush(lv_disp_drv_t * disp, const lv_area_t * area, lv_color_t * color_p)<br />
{<br />
		st7789v_disp_flush(area-&gt;x1,area-&gt;x2,area-&gt;y1,area-&gt;y2,color_p-&gt;full);<br />
		lv_disp_flush_ready(disp);<br />
}</p>
<p>void gui_main(void)<br />
{<br />
//touchpad_init(NULL);<br />
display_init();</p>
<pre><code>lv_init();
	static lv_disp_draw_buf_t draw_buf_dsc_1;;
	static lv_color_t buf_1[LV_BUFFER_SIZE];
</code></pre>
<p>//    static uint16_t buf[LV_BUFFER_SIZE];<br />
//    lv_disp_buf_init(&amp;disp_buf, buf, NULL, LV_BUFFER_SIZE);    /<em>Initialize the display buffer</em>/<br />
//    lv_disp_draw_buf_init(&amp;disp_buf, (void <em>)0x22000000, (void <em>)0x22050000/</em>(0x22000000+LV_HOR_RES_MAX * LV_VER_RES_MAX * sizeof(lv_color_t))</em>/, LV_HOR_RES_MAX * LV_VER_RES_MAX);    /<em>Initialize the display buffer</em>/<br />
		lv_disp_draw_buf_init(&amp;draw_buf_dsc_1,buf_1,NULL,LV_BUFFER_SIZE);</p>
<pre><code>/* Implement and register a function which can copy the rendered image to an area of your display */
static lv_disp_drv_t disp_drv;               /*Descriptor of a display driver*/
lv_disp_drv_init(&amp;disp_drv);          /*Basic initialization*/
disp_drv.flush_cb = my_disp_flush;    /*Set your driver function*/
disp_drv.draw_buf = &amp;draw_buf_dsc_1;        /*Assign the buffer to the display*/
disp_drv.hor_res = LV_HOR_RES_MAX;
disp_drv.ver_res = LV_VER_RES_MAX;
disp_drv.full_refresh = 0;
lv_disp_drv_register(&amp;disp_drv);      /*Finally register the driver*/

/* Implement and register a function which can read an input device. E.g. for a touch pad */
</code></pre>
<p>//    static lv_indev_drv_t indev_drv;                  /<em>Descriptor of a input device driver</em>/<br />
//    lv_indev_drv_init(&amp;indev_drv);             /<em>Basic initialization</em>/<br />
//    indev_drv.type = LV_INDEV_TYPE_POINTER;    /<em>Touch pad is a pointer-like device</em>/<br />
//    indev_drv.read_cb = my_touchpad_read;      /<em>Set your driver function</em>/<br />
//    lv_indev_drv_register(&amp;indev_drv);         /<em>Finally register the driver</em>/</p>
<pre><code>__SYSTEM_TIMER_CLK_ENABLE();
timer_init(Timer0, system_get_clock_config()*1000*LV_TICK_COUNT, TIMER_DIV_NONE);
timer_start(Timer0);
NVIC_SetPriority(TIMER0_IRQn, 5);
NVIC_EnableIRQ(TIMER0_IRQn);

os_timer_init(&amp;lv_schedule_timer, lv_schedule_timer_handler, NULL);
os_timer_start(&amp;lv_schedule_timer, 20, true);
</code></pre>
<p>//    timer_init(Timer1, system_get_clock_config()<em>1000</em>100, TIMER_DIV_NONE);<br />
//    timer_start(Timer1);<br />
//    NVIC_SetPriority(TIMER1_IRQn, 6);<br />
//    NVIC_EnableIRQ(TIMER1_IRQn);</p>
<pre><code>lv_obj_t *myBtn = lv_btn_create(lv_scr_act());                               // ????; ???:??????
lv_obj_set_pos(myBtn, 10, 10);                                               // ????
	lv_obj_set_style_bg_color(myBtn, lv_color_hex(0xFF0000), 0); // ?????
lv_obj_set_size(myBtn, 120, 50);                                             // ????
	lv_obj_center(myBtn);
	//create_btn(lv_scr_act(), 20, 20, 120, 50, &quot;btn1&quot;);
//lv_demo_widgets();
//lv_demo_benchmark();
//lv_ex_calendar_1();
//lv_demo_music();
</code></pre>
<p>}</p>
]]></description><link>http://www.freqchip.net:4567/topic/1880/使用fr8008gp-u-lvgldemo-创建控件反复重启</link><guid isPermaLink="true">http://www.freqchip.net:4567/topic/1880/使用fr8008gp-u-lvgldemo-创建控件反复重启</guid><dc:creator><![CDATA[yjx]]></dc:creator><pubDate>Thu, 06 Aug 2026 07:57:30 GMT</pubDate></item><item><title><![CDATA[FR8008GP-U的MTU最大协商值为247]]></title><description><![CDATA[<p>测试发现安卓端最大MTU的协商值为247，IOS为185。安卓端未何不能协商至512，SDK进行了限制还是协商方法错误？</p>
]]></description><link>http://www.freqchip.net:4567/topic/1877/fr8008gp-u的mtu最大协商值为247</link><guid isPermaLink="true">http://www.freqchip.net:4567/topic/1877/fr8008gp-u的mtu最大协商值为247</guid><dc:creator><![CDATA[张艺瀚]]></dc:creator><pubDate>Mon, 03 Aug 2026 08:56:26 GMT</pubDate></item><item><title><![CDATA[为什么我上传音频显示失败无论是重新导入还是重新上传都显示请写入完成后再写入]]></title><description><![CDATA[<p><img src="/assets/uploads/files/1784519544489-6c9bd1ce-5ee7-4608-bbf9-08b2ad2999a8-97297651b08e206f69d3da1196150d9a-resized.jpg" alt="0_1784519542912_6c9bd1ce-5ee7-4608-bbf9-08b2ad2999a8-97297651b08e206f69d3da1196150d9a.jpg" class="img-responsive img-markdown" /></p>
]]></description><link>http://www.freqchip.net:4567/topic/1872/为什么我上传音频显示失败无论是重新导入还是重新上传都显示请写入完成后再写入</link><guid isPermaLink="true">http://www.freqchip.net:4567/topic/1872/为什么我上传音频显示失败无论是重新导入还是重新上传都显示请写入完成后再写入</guid><dc:creator><![CDATA[橙子味汽水]]></dc:creator><pubDate>Mon, 20 Jul 2026 03:53:46 GMT</pubDate></item></channel></rss>