经过几天的煎熬,已经确认WS8204是RS21E芯片方案。
对应海思H2812系列大概可能是P352813N 1100E,也就是说有1M flash,而非512k。
海思H2812方案SDK目前处于半开源状态,同为H2812方案的小熊派BearPi-Pico H2821,安信可Ai-BS21-32S芯片是RS21(P352813 N1100)方案,与WS8204不同。也就是说如果直接拿这两个开发板的SDK开发的固件是不能运行在WS8204的。
由于授权的原因,官方没有提供SDK。这可以理解,因为目前海思只向合作厂商提供H2812的SDK,并且签署了协议,厂商也不便向外提供SDK。
那么只能自己东拼西凑弄了一个RS21E的SDK,来点一下灯。
由于个人也没有海思授权,更不想介入麻烦,只是基于研究的心态做一些尝试,所以请不要向我要SDK。
关于如何搭建环境请查询小熊派BearPi-Pico H2821,安信可Ai-BS21-32S官网有详细的安装步骤,但是SDK不适用。
1、app_os_init入口程序
void app_os_init(void) { uapi_pin_set_mode(6, HAL_PIO_FUNC_GPIO); uapi_gpio_set_dir(6, GPIO_DIRECTION_OUTPUT); uapi_gpio_set_val(6, GPIO_LEVEL_HIGH); uapi_pin_set_mode(5, HAL_PIO_FUNC_GPIO); uapi_gpio_set_dir(5, GPIO_DIRECTION_OUTPUT); uapi_gpio_set_val(5, GPIO_LEVEL_LOW); uint32_t ret; uint32_t taskId; TSK_INIT_PARAM_S taskParam = { .usTaskPrio = 10, // 优先级 .uwStackSize = 0x1000, // 栈大小 .pcName = "demoTask", // 任务名 .pfnTaskEntry = (TSK_ENTRY_FUNC)taskEntryFunc, // 入口函数 }; ret = LOS_TaskCreate(&taskId, &taskParam); if (ret != LOS_OK) { // 错误处理 } }
初始化P05、P06,建立liteOS task。(板上P05、P06标反了)。
2、taskEntryFunc
void taskEntryFunc(void) { while (1) { // 任务执行逻辑 osal_msleep(1000); uapi_gpio_toggle(6); uapi_gpio_toggle(5); } }
3、运行效果
4、DEMO
#include "common_def.h" #include "osal_debug.h" #include "cmsis_os2.h" #include "app_init.h" #define TASKS_TEST_TASK_STACK_SIZE 0x1000 #define TASKS_TEST_TASK_PRIO (osPriority_t)(17) #define TASKS_TEST_DURATION_MS 1000 static void *tasks_test_task(const char *arg) { unused(arg); while (1) { osal_printk("Hello World WS8204\r\n"); osDelay(TASKS_TEST_DURATION_MS); } return NULL; } static void tasks_test_entry(void) { osThreadAttr_t attr; attr.name = "TasksTask"; attr.attr_bits = 0U; attr.cb_mem = NULL; attr.cb_size = 0U; attr.stack_mem = NULL; attr.stack_size = TASKS_TEST_TASK_STACK_SIZE; attr.priority = TASKS_TEST_TASK_PRIO; if (osThreadNew((osThreadFunc_t)tasks_test_task, NULL, &attr) == NULL) { /* Create task fail. */ } } /* Run the tasks_test_entry. */ app_run(tasks_test_entry);
void app_os_init(void) { app_tasks_init(); }