内核(设备模型)
bflb_device_set_userdata(device, user_data)
把用户数据绑定到设备句柄
参数:
device:设备句柄user_data:用户数据指针
返回值:无
通用工具
arch_strcmp(str1, str2)
字符串比较(可走 ROM API),返回差值
参数:
str1:参数说明见 SDK 头文件str2:参数说明见 SDK 头文件
返回值:int
arch_memcmp(s1, s2, n)
内存字节比较(可走 ROM API),返回差值
参数:
s1:参数说明见 SDK 头文件s2:参数说明见 SDK 头文件n:参数说明见 SDK 头文件
返回值:int
arch_delay_us(cnt)
软件微秒级延时(循环等待)
参数:
cnt:参数说明见 SDK 头文件
返回值:无
arch_delay_ms(cnt)
软件毫秒级延时(循环等待)
参数:
cnt:参数说明见 SDK 头文件
返回值:无
bflb_soft_crc16(in, len)
软件计算 CRC16 校验
参数:
in:参数说明见 SDK 头文件len:长度
返回值:[in] uint16_t
bflb_soft_crc32_ex(initial, in, len)
以指定初值软件计算 CRC32
参数:
initial:参数说明见 SDK 头文件in:参数说明见 SDK 头文件len:长度
返回值:[in] uint32_t
bflb_soft_crc32(initial, in, len)
软件计算 CRC32 校验
参数:
initial:参数说明见 SDK 头文件in:参数说明见 SDK 头文件len:长度
返回值:[in] uint32_t
bflb_check_cache_addr(in, len)
判断地址是否属于可缓存(XIP/PSRAM)区域
参数:
in:参数说明见 SDK 头文件len:长度
返回值:[in] uint32_t
bflb_check_cache_addr_aligned(in, len)
判断地址是否按缓存行大小对齐
参数:
in:参数说明见 SDK 头文件len:长度
返回值:[in] uint32_t
bflb_get_app_version_from_efuse(version)
@}
返回值:见 SDK 头文件
bflb_set_app_version_to_efuse(version)
@}
返回值:见 SDK 头文件
bflb_get_boot2_version_from_efuse(version)
@}
返回值:见 SDK 头文件
bflb_set_boot2_version_to_efuse(version)
@}
返回值:见 SDK 头文件
bflb_get_boot2_info_from_flash(version)
@}
返回值:见 SDK 头文件
bflb_get_chip_type(chip_type, chip_version)
@}
返回值:见 SDK 头文件
volatile(ebreak)
@}
返回值:见 SDK 头文件
arch_memcpy(dst, src, n)
内存复制(可走 ROM API)
参数:
dst:参数说明见 SDK 头文件src:参数说明见 SDK 头文件n:参数说明见 SDK 头文件
返回值:void*
arch_memset(s, c, n)
内存填充(可走 ROM API)
参数:
s:参数说明见 SDK 头文件c:参数说明见 SDK 头文件n:参数说明见 SDK 头文件
返回值:void*
arch_memcpy4(dst, src, n)
按 4 字节对齐复制(可走 ROM API)
参数:
dst:参数说明见 SDK 头文件src:参数说明见 SDK 头文件n:参数说明见 SDK 头文件
返回值:uint32_t*
arch_memcpy_fast(pdst, psrc, n)
优化后的快速内存复制(对齐时按字复制)
参数:
pdst:参数说明见 SDK 头文件psrc:参数说明见 SDK 头文件n:参数说明见 SDK 头文件
返回值:void*
arch_memset4(dst, val, n)
按 4 字节对齐填充(可走 ROM API)
参数:
dst:参数说明见 SDK 头文件val:参数说明见 SDK 头文件n:参数说明见 SDK 头文件
返回值:uint32_t*
bflb_get_no_cache_addr(in, len)
获取指定可缓存地址的无缓存映射地址
参数:
in:参数说明见 SDK 头文件len:长度
返回值:[in] uint32_t
printf(n, string, function, file, line)
格式化打印到串口(标准库函数)
返回值:见 SDK 头文件
中断
bflb_irq_initialize()
中断 initialize.
返回值:无
bflb_irq_save()
关闭 global irq and save the previous 状态。
返回值:last 状态
bflb_irq_restore(flags)
使能 global irq by the previous 状态。
参数:
flags:previous 状态 by bflb_irq_save
返回值:无
bflb_irq_attach(irq, isr, arg)
绑定中断 with 回调。
参数:
irq:irq numberisr:中断 回调arg:用户数据
返回值:A negated errno 值 on failure.
bflb_irq_detach(irq)
解绑中断, reset 中断 回调。
参数:
irq:irq number
返回值:A negated errno 值 on failure.
bflb_irq_enable(irq)
使能中断。
参数:
irq:irq number
返回值:无
bflb_irq_disable(irq)
关闭中断。
参数:
irq:irq number
返回值:无
bflb_irq_set_pending(irq)
设置中断 with pending。
参数:
irq:irq number
返回值:无
bflb_irq_clear_pending(irq)
清除中断 pending 状态。
参数:
irq:irq number
返回值:无
bflb_irq_set_nlbits(nlbits)
设置中断 group。
参数:
nlbits:参数说明见 SDK 头文件
返回值:无
bflb_irq_set_priority(irq, preemptprio, subprio)
设置中断 priority。
参数:
irq:irq numberpreemptprio:preempt prioritysubprio:sub priority
返回值:无
bl618dg_level2_irq_handler(irq, preemptprio, subprio)
设置中断 priority。
参数:
irq:irq numberpreemptprio:preempt prioritysubprio:sub priority
返回值:无
时钟
bflb_peripheral_clock_control(peri, enable)
enable/disable peri clock
参数:
peri:: BFLB_PERIPHERAL_xxxenable:: Boolean 值 to enable or disable the clock
返回值:int
bflb_peripheral_clock_get(peri)
get peri clock 值
参数:
peri:: BFLB_PERIPHERAL_xxx
返回值:int
bflb_peripheral_clock_status_get(peri)
get peri clock 状态
参数:
peri:: BFLB_PERIPHERAL_xxx
返回值:int
bflb_clk_get_system_clock(type)
Get system clock frequence
参数:
type:system clock type
返回值:frequence
bflb_clk_get_peripheral_clock(type, idx)
Get peripheral clock frequence
参数:
type:peripheral typeidx:peripheral index
返回值:frequence
复位
bflb_peripheral_reset(peri)
reset peri
参数:
peri:: BFLB_PERIPHERAL_xxx
返回值:int
设备名
链表
bflb_dlist_remove(n)
从双向链表删除节点
参数:
n:the node to remove from the list.
返回值:见 SDK 头文件
bflb_dlist_insert_after(l, n)
把节点插入指定节点之后
参数:
l:list to insert itn:new node to be inserted
返回值:见 SDK 头文件
bflb_dlist_insert_before(n, l)
把节点插入指定节点之前
参数:
n:new node to be insertedl:list to insert it
返回值:见 SDK 头文件
eFuse 控制器
bflb_ef_ctrl_get_common_trim_list(trim_list)
获取 eFuse control common trim list。
参数:
trim_list:pointer to save trim list
返回值:trim list length
bflb_ef_ctrl_set_para(para)
配置 eFuse 读写的时序/延时参数
参数:
para:parameter for eFuse program or read
返回值:int
bflb_ef_ctrl_write_direct(dev, offset, pword, count, program)
按偏移直接编程写入 eFuse(可选立即烧写)
参数:
dev:设备句柄offset:偏移pword:参数说明见 SDK 头文件count:数量program:参数说明见 SDK 头文件
📎 设备名速查:支持的设备名(BL616)
返回值:无
bflb_ef_ctrl_read_direct(dev, offset, pword, count, reload)
按偏移直接读取 eFuse 数据(可选重新加载)
参数:
dev:设备句柄offset:偏移pword:参数说明见 SDK 头文件count:数量reload:参数说明见 SDK 头文件
📎 设备名速查:支持的设备名(BL616)
返回值:无
bflb_ef_ctrl_read_common_trim(dev, name, trim, reload)
按名称读取 eFuse 公共校准参数
参数:
dev:设备句柄name:名称trim:参数说明见 SDK 头文件reload:参数说明见 SDK 头文件
📎 设备名速查:支持的设备名(BL616)
返回值:无
bflb_ef_ctrl_write_common_trim(dev, name, value, program)
按名称写入 eFuse 公共校准参数(含奇偶校验)
参数:
dev:设备句柄name:名称value:值program:参数说明见 SDK 头文件
📎 设备名速查:支持的设备名(BL616)
返回值:无
bflb_ef_ctrl_is_all_bits_zero(val, start, len)
判断数值的指定位段是否全为 0
参数:
val:参数说明见 SDK 头文件start:起始位置len:长度
返回值:uint8_t
bflb_ef_ctrl_get_byte_zero_cnt(val)
统计一个字节中为 0 的位数
参数:
val:参数说明见 SDK 头文件
返回值:uint32_t
bflb_ef_ctrl_get_trim_parity(val, len)
计算指定位长的奇偶校验位
参数:
val:参数说明见 SDK 头文件len:长度
返回值:uint8_t
bflb_ef_ctrl_busy(dev)
Check eFuse busy 状态
参数:
dev:ef control 设备 pointer
📎 设备名速查:支持的设备名(BL616)
返回值:1 for busy 0 for not
bflb_ef_ctrl_busy_r1(dev)
Check eFuse region1 busy 状态
参数:
dev:ef control 设备 pointer
📎 设备名速查:支持的设备名(BL616)
返回值:1 for busy 0 for not
支持的设备名(BL616)
以下设备名可用于 bflb_device_get_by_name(name) 获取外设句柄。设备表取自 SDK drivers/lhal/config/ 下对应芯片的 device_table.c:同时出现在 BL616 与 BL616CL 设备表中的设备名,Ai-M61 / Ai-M62 / Ai-M64 均支持;仅 BL616 表有的为 Ai-M61 / Ai-M62;仅 BL616CL 表有的为 Ai-M64 专属。
| 设备名 | 外设 | 支持的模组 | 参考 |
|---|---|---|---|
adc | ADC | Ai-M61 / Ai-M62 | ADC |
dac | DAC | Ai-M61 / Ai-M62 | DAC |
ef_ctrl | eFuse 控制器 | Ai-M61 / Ai-M62 / Ai-M64 | EFUSE |
gpio | GPIO | Ai-M61 / Ai-M62 / Ai-M64 | GPIO 输出(点亮 LED) |
uart0 | UART 串口 | Ai-M61 / Ai-M62 / Ai-M64 | UART(串口) |
uart1 | UART 串口 | Ai-M61 / Ai-M62 / Ai-M64 | UART(串口) |
spi0 | SPI | Ai-M61 / Ai-M62 / Ai-M64 | SPI 协议 |
pwm_v2_0 | PWM v2 | Ai-M61 / Ai-M62 / Ai-M64 | PWM |
dma0_ch0 | DMA | Ai-M61 / Ai-M62 / Ai-M64 | DMA 传输 |
dma0_ch1 | DMA | Ai-M61 / Ai-M62 / Ai-M64 | DMA 传输 |
dma0_ch2 | DMA | Ai-M61 / Ai-M62 / Ai-M64 | DMA 传输 |
dma0_ch3 | DMA | Ai-M61 / Ai-M62 / Ai-M64 | DMA 传输 |
i2c0 | I2C | Ai-M61 / Ai-M62 / Ai-M64 | I2C 协议 |
i2c1 | I2C | Ai-M61 / Ai-M62 / Ai-M64 | I2C 协议 |
i2s0 | I2S 音频 | Ai-M61 / Ai-M62 / Ai-M64 | I2S 音频 |
timer0 | 定时器 | Ai-M61 / Ai-M62 / Ai-M64 | TIMER 定时器 |
timer1 | 定时器 | Ai-M61 / Ai-M62 / Ai-M64 | TIMER 定时器 |
rtc | RTC | Ai-M61 / Ai-M62 / Ai-M64 | RTC 实时时钟 |
sec_aes | AES 加密 | Ai-M61 / Ai-M62 / Ai-M64 | SEC_ENG 安全引擎(AES) |
sec_sha | SHA 摘要 | Ai-M61 / Ai-M62 / Ai-M64 | |
sec_trng | 真随机数 TRNG | Ai-M61 / Ai-M62 / Ai-M64 | |
sec_pka | PKA 公钥算法 | Ai-M61 / Ai-M62 / Ai-M64 | |
sec_gmac | GMAC 认证 | Ai-M61 / Ai-M62 / Ai-M64 | |
emac0 | 以太网 EMAC | Ai-M61 / Ai-M62 / Ai-M64 | EMAC 以太网 |
watchdog0 | 看门狗 WDG | Ai-M61 / Ai-M62 / Ai-M64 | TIMER 定时器 |
cks | 校验和 CKS | Ai-M61 / Ai-M62 / Ai-M64 | CKS 校验和 |
mjpeg | MJPEG 编码 | Ai-M61 / Ai-M62 / Ai-M64 | MJPEG 视频采集 |
irrx | 红外 IR | Ai-M61 / Ai-M62 | IR 红外(NEC 协议) |
cam0 | 摄像头 CAM | Ai-M61 / Ai-M62 / Ai-M64 | CAM 摄像头(DVP) |
cam1 | 摄像头 CAM | Ai-M61 / Ai-M62 / Ai-M64 | CAM 摄像头(DVP) |
auadc | 音频采集 AUADC | Ai-M61 / Ai-M62 / Ai-M64 | 音频采集及播放 |
audac | 音频 DAC | Ai-M61 / Ai-M62 / Ai-M64 | 音频采集及播放 |
sdio2 | SDIO | Ai-M61 / Ai-M62 / Ai-M64 | SDIO 高速接口 |
sdh | SD 主机 | Ai-M61 / Ai-M62 / Ai-M64 | |
dbi | DBI 显示接口 | Ai-M61 / Ai-M62 / Ai-M64 | DBI 显示屏接口 |
wo | 单线输出 WO | Ai-M61 / Ai-M62 / Ai-M64 | WO 单线输出(WS2812) |
usb_v2 | USB | Ai-M61 / Ai-M62 / Ai-M64 | |
adc_v2_0 | ADC v2 | 仅 Ai-M64 支持 | |
uart2 | UART 串口 | 仅 Ai-M64 支持 | |
spi1 | SPI | 仅 Ai-M64 支持 | |
dma0_ch4 | DMA | 仅 Ai-M64 支持 | |
dma0_ch5 | DMA | 仅 Ai-M64 支持 | |
dma0_ch6 | DMA | 仅 Ai-M64 支持 | |
dma0_ch7 | DMA | 仅 Ai-M64 支持 | |
timer0_capture | TIMER 捕获 | 仅 Ai-M64 支持 | |
gmac0 | 千兆以太网 GMAC | 仅 Ai-M64 支持 | |
mjdec | JPEG 解码 | 仅 Ai-M64 支持 | |
pec_sm0 | PEC v2 | 仅 Ai-M64 支持 | |
pec_sm1 | PEC v2 | 仅 Ai-M64 支持 | |
touch_v2 | touch v2 | 仅 Ai-M64 支持 |
遇到问题?
如有其他问题,请到统一的提问与讨论区:Ai-Thinker Discussions

