国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

以RISC-V架構(gòu)的D1 Dock Pro和D1 Nezha開發(fā)板

芯片開放社區(qū) ? 來源:玄鐵杯第二屆RISC-V應(yīng)用創(chuàng) ? 作者:玄鐵杯第二屆RIS ? 2022-12-19 10:20 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本項目以RISC-V架構(gòu)的D1 Dock Pro和D1 Nezha開發(fā)板為硬件平臺,應(yīng)用物聯(lián)網(wǎng)區(qū)塊鏈技術(shù),設(shè)計開發(fā)一套分布式能源智慧管理小型示范系統(tǒng),在該系統(tǒng)上實現(xiàn)能源生產(chǎn)和消費數(shù)據(jù)的實時監(jiān)測。該項目在“玄鐵杯第二屆RISC-V應(yīng)用創(chuàng)新大賽”活動中榮獲一等獎。

關(guān)于分布式能源智慧管理和M2M交易系統(tǒng)的技術(shù)細(xì)節(jié),請看本文詳細(xì)介紹。

01項目介紹

能源和環(huán)保是關(guān)乎人類未來的重要課題。為實現(xiàn)碳中和目標(biāo),大力發(fā)展可再生清潔能源以替代傳統(tǒng)化石能源,提高能源系統(tǒng)監(jiān)控和消費的智能化水平,是可行的重要途徑之一。本項目以RISC-V架構(gòu)的D1 Dock Pro和D1 Nezha開發(fā)板為硬件平臺,應(yīng)用物聯(lián)網(wǎng)和區(qū)塊鏈技術(shù),設(shè)計開發(fā)一套分布式能源智慧管理小型示范系統(tǒng),在該系統(tǒng)上實現(xiàn)能源生產(chǎn)和消費數(shù)據(jù)的實時監(jiān)測。

02技術(shù)方案

項目使用 D1 Dock Pro 開發(fā)板設(shè)計開發(fā)一款專用網(wǎng)關(guān),實時采集電池控制器、氣象環(huán)境傳感器等其它傳感器的數(shù)據(jù),并通過無線通信方式(WiFi)以HTTP協(xié)議或MQTT協(xié)議將傳感器數(shù)據(jù)上傳至物聯(lián)網(wǎng)后臺。

17570832-7f43-11ed-8abf-dac502259ad0.jpg??

圖1.專用網(wǎng)關(guān)示意

1791faaa-7f43-11ed-8abf-dac502259ad0.jpg

圖2.專用網(wǎng)關(guān)實物圖

智能開關(guān)用于能源消費端,實現(xiàn)對能源消費者(電器負(fù)載)的供電控制、電能消費數(shù)據(jù)的采集和傳輸?shù)裙δ堋T撝悄荛_關(guān)基于 D1 Dock Pro 開發(fā)板進(jìn)行設(shè)計開發(fā),通過開發(fā)板的I/O口控制繼電器、UART接收電能計量模塊的數(shù)據(jù)。設(shè)計一個擴(kuò)展電路板與開發(fā)板配合使用,擴(kuò)展電路板集成電能計量模塊、繼電器等。本文設(shè)計的智慧開關(guān)的功能主要是控制電器開關(guān)與計量電器用電參數(shù)以及環(huán)境參數(shù)并上傳到云端服務(wù)器。

17c2c180-7f43-11ed-8abf-dac502259ad0.jpg

圖3.智能開關(guān)示意圖

17f22718-7f43-11ed-8abf-dac502259ad0.jpg

圖4.智能開關(guān)實物圖

03核心業(yè)務(wù)代碼

3.1智能開關(guān)電能采集分析

// sensor variable
float sensor_data[9] = {1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9};
int recv_cmd; 
unsigned long Voltage_data, Current_data, Power_data, Energy_data, Pf_data, CO2_data, HZ;

// read the consumer date
void read_consumer_data(void)
{

//send the instruction
unioncrc_data
{
unsigned int word16;
unsigned char byte[2];
} crc_now;

tx_buffer[0] = 0x01;
tx_buffer[1] = 0x03;
tx_buffer[2] = 0x01;
tx_buffer[3] = 0x00;
tx_buffer[4] = 0x02;
tx_buffer[5] = 0x08;
crc_now.word16 = chk_crc(tx_buffer, 6);
tx_buffer[6] = crc_now.byte[1];//CRC verification
tx_buffer[7] = crc_now.byte[0];

ret = csi_uart_send_async(&g_uart, tx_buffer,8);
//wait until send finished
while(1) {
if (tx_async_flag) {
tx_async_flag = 0;
break;
}
}

printf("send succeed
");
   ret = csi_uart_receive_async(&g_uart, rx_buffer, 1);
   //wait until receieve  finished
   while(1) {
//   printf("not_receieved
");
   aos_msleep(200);
     if (rx_async_flag) {
         break;
     }
   }


  printf("Line 358: got data");
  parse_data();
  publish_sensor_data(client, "publish");
  
}

//analyze the consumer date
void parse_data(void)
{
csi_error_t ret;
unsigned char i;
union crc_data
{
unsigned int word16;
unsigned char byte[2];
} crc_now;

if (rx_async_flag == 1){ // check if receieve finished
rx_async_flag = 0;
if ((rx_buffer[0] == 0x01)) { //check the ID of the device
crc_now.word16 = chk_crc(rx_buffer, recieve_data_num - 2);//crc verification
if ((crc_now.byte[0] == rx_buffer[recieve_data_num - 1]) && (crc_now.byte[1] == rx_buffer[recieve_data_num - 2])) {
//parse voltage
Voltage_data = (((unsigned long)(rx_buffer[3])) << 24) | (((unsigned long)(rx_buffer[4])) << 16) | (((unsignedlong)(rx_buffer[5])) << 8) | rx_buffer[6];
sensor_data[0] = (float)(Voltage_data * 0.0001);

//parse current
Current_data = (((unsigned long)(rx_buffer[7])) << 24) | (((unsigned long)(rx_buffer[8])) << 16) | (((unsignedlong)(rx_buffer[9])) << 8) | rx_buffer[10];
sensor_data[1] = (float)(Current_data * 0.0001);

//parse power
Power_data = (((unsignedlong)(rx_buffer[11])) << 24) | (((unsigned long)(rx_buffer[12])) << 16) | (((unsignedlong)(rx_buffer[13])) << 8) | rx_buffer[14];
sensor_data[2] = (float)(Power_data * 0.0001);

//parse energy
Energy_data = (((unsignedlong)(rx_buffer[15])) << 24) | (((unsigned long)(rx_buffer[16])) << 16) | (((unsignedlong)(rx_buffer[17])) << 8) | rx_buffer[18];
sensor_data[3] = (float)(Energy_data * 0.0001);

//parse power factor
Pf_data = (((unsignedlong)(rx_buffer[19])) << 24) | (((unsigned long)(rx_buffer[20])) << 16) | (((unsignedlong)(rx_buffer[21])) << 8) | rx_buffer[22];
sensor_data[4] = (float)(Pf_data * 0.001);

//parse CO2
CO2_data = (((unsigned long)(rx_buffer[23])) << 24) | (((unsigned long)(rx_buffer[24])) << 16) | (((unsignedlong)(rx_buffer[25])) << 8) | rx_buffer[26];
sensor_data[5] = (float)(CO2_data * 0.0001);

//parse frequency of the Single phase alternating current
HZ = (((unsigned long)(rx_buffer[31])) << 24) | (((unsigned long)(rx_buffer[32])) << 16) | (((unsignedlong)(rx_buffer[33])) << 8) | rx_buffer[34];
sensor_data[6] = (float)(HZ * 0.01);

} else {
printf("CRC_error
");
}
}

} else {
printf("receieve_not_finished
");
  }
}
// EOF uart

3.2MQTT電能數(shù)據(jù)上云

// mqtt 
char pub_topic[] = "wattnode/data"; 
char sub_topic[] = "wattnode/cmd"; 
mqtt_client_t *client;
int is_mqtt_ready = 0;

void mqtt_do_connect(mqtt_client_t *client);
static void mqtt_incoming_data_cb(void *arg, const u8_t *data, u16_t len, u8_t flags);
void publish_sensor_data(mqtt_client_t *client, void *arg);

/* Called when publish is complete either with sucess or failure */
static void mqtt_pub_request_cb(void *arg, err_t result)
{
  if(result != ERR_OK) {
    printf("Publish result: %d
", result);
  }
}

/* The idea is to demultiplex topic and create some reference to be used in data callbacks
   Example here uses a global variable, better would be to use a member in arg
   If RAM and CPU budget allows it, the easiest implementation might be to just take a copy of
   the topic string and use it in mqtt_incoming_data_cb
*/
static int inpub_id;
static void mqtt_incoming_publish_cb(void *arg, const char *topic, u32_t tot_len)
{
  printf("Incoming publish at topic %s with total length %u
", topic, (unsigned int)tot_len);

  /* Decode topic string into a user defined reference */
  if(strcmp(topic, "print_payload") == 0) {
    inpub_id = 0;
  } else if(topic[0] == 'A') {
    /* All topics starting with 'A' might bwhile(1)e handled at the same way */
    inpub_id = 1;
  } else {
    /* For all other topics */
    inpub_id = 2;
  }
}

static void mqtt_sub_request_cb(void *arg, err_t result)
{
  /* Just print the result code here for simplicity, 
     normal behaviour would be to take some action if subscribe fails like 
     notifying user, retry subscribe or disconnect from server */
    printf("Subscribe result: %d
", result);
}

static void mqtt_connection_cb(mqtt_client_t *client, void *arg, mqtt_connection_status_t status)
{
  err_t err;
  if(status == MQTT_CONNECT_ACCEPTED) {
    printf("mqtt_connection_cb: Successfully connected
");
    
    /* Setup callback for incoming publish requests */
    mqtt_set_inpub_callback(client, mqtt_incoming_publish_cb, mqtt_incoming_data_cb, arg);
    
    /* Subscribe to a topic named "subtopic" with QoS level 1, call mqtt_sub_request_cb with result */ 
    err = mqtt_subscribe(client, sub_topic, 1, mqtt_sub_request_cb, arg);

    if(err != ERR_OK) {
      printf("mqtt_subscribe return: %d
", err);
    }

    printf("ready to read data");

    is_mqtt_ready = 1;

  } else {
    printf("mqtt_connection_cb: Disconnected, reason: %d
", status);
    
    /* Its more nice to be connected, so try to reconnect */
    mqtt_do_connect(client);
  }  
}

static void mqtt_incoming_data_cb(void *arg, const u8_t *data, u16_t len, u8_t flags)
{
  printf("Incoming publish payload with length %d, flags %u
", len, (unsigned int)flags);

  if(flags & MQTT_DATA_FLAG_LAST) {
    /* Last fragment of payload received (or whole part if payload fits receive buffer
       See MQTT_VAR_HEADER_BUFFER_LEN)  */

    /* Call function or do action depending on reference, in this case inpub_id */
    if(inpub_id == 0) {
      /* Don't trust the publisher, check zero termination */
      if(data[len-1] == 0) {
        //printf("mqtt_incoming_data_cb: %s
", (const char *)data);
      }
    } else if(inpub_id == 1) {
      /* Call an 'A' function... */
    } else {
    //   printf("mqtt_incoming_data_cb: Ignoring payload...
");
        // printf("mqtt_incoming_data_cb: %s
", (const char *)data);
        recv_cmd = atoi((const char *)data);



        printf("receive data: %d
", recv_cmd);
    
    }
  } else {
    /* Handle fragmented payload, store in buffer, write to file or whatever */
  }
}

void publish_sensor_data(mqtt_client_t *client, void *arg)
{
    err_t err;
    u8_t qos = 0; /* 0 1 or 2, see MQTT specification */
    u8_t retain = 0; /* No don't retain such crappy payload... */

    const int LEN = 9;
    // cat all float data to string
    char sep = ';';
    // char *prefix = "data=";
    char *prefix = "";
    char _str_data[10];
    char post_str[128];

    strcpy(post_str, prefix);
    for (int i = 0; i < LEN-1; i++) {
        sprintf(_str_data, "%.3f", sensor_data[i]);
        _str_data[strlen(_str_data)-1] = sep;
        strcat(post_str, _str_data);
    }

    sprintf(_str_data, "%.3f", sensor_data[LEN-1]);
    strcat(post_str, _str_data);

    err = mqtt_publish(client, pub_topic, post_str, strlen(post_str), qos, retain, mqtt_pub_request_cb, arg);
    if(err != ERR_OK) {
        printf("Publish err: %d
", err);
    }
}

void mqtt_do_connect(mqtt_client_t *client)
{
    struct mqtt_connect_client_info_t ci;
    err_t err;

    ip4_addr_t ip_addr;
    IP4_ADDR(&ip_addr, 106, 14, 44, 95);

    /* Setup an empty client info structure */
    memset(&ci, 0, sizeof(ci));

    /* Minimal amount of information required is client identifier, so set it here */ 
    ci.client_id = "wattnode1";

    /* Initiate client and connect to server, if this fails immediately an error code is returned
        otherwise mqtt_connection_cb will be called with connection result after attempting 
        to establish a connection with the server. 
        For now MQTT version 3.1.1 is always used */

    err = mqtt_client_connect(client, &ip_addr, MQTT_PORT, mqtt_connection_cb, 0, &ci);

    /* For now just print the result code if something goes wrong */
    if(err != ERR_OK) {
        printf("mqtt_connect return %d
", err);
    }
}

static void mqtt_main_task(void *d)
{
    printf("Enter mqtt_main_task
");
    // mqtt_client_t *client = mqtt_client_new();
    client = mqtt_client_new();
    if(client != NULL) {
        mqtt_do_connect(client);
    }
}
// EOF mqtt

3.3智能開關(guān)

// switch variable
const int SWITCH_PIN = PC1;
static csi_gpio_pin_t pin;
#define GPIO_CHECK_RETURN(ret)           
    do {                                 
        if (ret != CSI_OK) {             
            return -1;                   
        }                                
    } while(0);

//init the switch
void switch_init()
{
  ret = csi_gpio_pin_init(&pin, SWITCH_PIN);
  GPIO_CHECK_RETURN(ret);

  /* Set output mode */
  ret = csi_gpio_pin_dir(&pin, GPIO_DIRECTION_OUTPUT);
  GPIO_CHECK_RETURN(ret);
}
// EOF switch

3.4串口處理部分

// uart variable
static csi_uart_t g_uart;
static volatile uint8_t rx_async_flag = 0;
static volatile uint8_t tx_async_flag = 0;
static uint8_t tx_buffer[140];
static uint8_t rx_buffer[140];
int recieve_data_num = 37;
#define DATE_UART_BAUDRATE   4800
#define DATE_UART_IDX 5
#define UART_CHECK_RETURN(ret)                      
        do {                                        
            if (ret != CSI_OK) {                    
                return -1;                          
            }                                       
        } while(0);

// crc function
unsigned int calc_crc(unsigned char crcbuf, unsigned int crc);
unsigned int chk_crc(unsigned char* buf, unsigned char len);

//task
static aos_task_t task_date_uart5;

void date_uart5_entry()
{
   
while(1)
{
switch(recv_cmd){
case 0:
break;
case 1:
csi_gpio_pin_write(&pin, GPIO_PIN_HIGH);
recv_cmd = 0;
break;
case 2:
csi_gpio_pin_write(&pin, GPIO_PIN_LOW);
recv_cmd = 0;
break;
case 3:
read_consumer_data();
recv_cmd = 0;
break;
default:
break;

}//eof switch

aos_msleep(2000);
    }//eof while
}//eof func

//callback function of uart
static void uart_event_cb(csi_uart_t *uart, csi_uart_event_t event, void *arg)
{
  switch (event) {
    case UART_EVENT_SEND_COMPLETE:
      tx_async_flag = 1;
      break;

    case UART_EVENT_RECEIVE_COMPLETE:
      rx_async_flag = 1;
      break;

    default:
      break;
  }//eof switch
}//eof func


void uart_init()
{
  csi_pin_set_mux(PB4, PB4_UART5_TX);
  csi_pin_set_mux(PB5, PB5_UART5_RX);

  /* init uart, DATE_UART_IDX == 5 */
  ret = csi_uart_init(&g_uart, DATE_UART_IDX);
  UART_CHECK_RETURN(ret);

  /* set uart baudrate */
  ret = csi_uart_baud(&g_uart, DATE_UART_BAUDRATE);
  UART_CHECK_RETURN(ret);

  /* set uart format */
  ret = csi_uart_format(&g_uart, UART_DATA_BITS_8, UART_PARITY_NONE, UART_STOP_BITS_1);
  UART_CHECK_RETURN(ret);

  /* attach callback to uart device */
  ret = csi_uart_attach_callback(&g_uart, uart_event_cb, NULL);
  UART_CHECK_RETURN(ret);

}



// calculate crc function
unsigned int calc_crc(unsigned char crcbuf, unsigned int crc)
{
unsigned char i;
unsigned char chk;
crc = crc ^ crcbuf; for (i = 0; i < 8; i++)
{
chk = (unsigned char)(crc & 1);
crc = crc >> 1;
crc = crc & 0x7fff;
if (chk == 1) crc = crc ^ 0xa001;
crc = crc & 0xffff;
}
return crc;
}

// verify crc function
unsigned int chk_crc(unsigned char* buf, unsigned char len)
{
unsigned char hi, lo;
unsigned int i;
unsigned int crc;
crc = 0xFFFF;
for (i = 0; i < len; i++)
{
crc = calc_crc(*buf, crc);
buf++;
}

hi = (unsigned char)(crc % 256);
lo = (unsigned char)(crc / 256);
crc = (((unsigned int)(hi)) << 8) | lo;
return crc;
}

3.5主函數(shù)

int main(void)
{
  cxx_system_init();
  board_yoc_init();

  switch_init();
  uart_init();
    
  /* Subscribe */
  event_subscribe(EVENT_NETMGR_GOT_IP, network_event, NULL);
  event_subscribe(EVENT_NETMGR_NET_DISCON, network_event, NULL);
  
  aos_task_new_ext(&task_date_uart5, "task_date_uart5", date_uart5_entry, NULL, 4096, AOS_DEFAULT_APP_PRI);
//  aos_task_new_ext(&uart5_proc, "uart5_proc", data_proc, NULL, 1024, 30);
  
  app_wifi_init();

  // while (1) {
  //   if (is_mqtt_ready == 1) {
  //   //   read_consumer_data();
  //     printf("OK");
  //     // aos_msleep(1000);
  //   }
  //   // test_uart();
    
  //   // aos_msleep(2000);
  // }
}

04問題匯總

uart的配置

在官方的GitBook中對驅(qū)動函數(shù)進(jìn)行了詳細(xì)地講解并附有相關(guān)例程:文檔首頁· GitBook (t-head.cn)

但并未對具體的底層配置修改進(jìn)行說明,在一開始編寫串口部分的代碼時,一直未能成功初始化并調(diào)通串口,在工程師的幫助之下對D1 dock pro的底層配置有了一定的了解。這里以led_demo為例,演示如何在此基礎(chǔ)之上成功配置uart5。

改動1

181fac06-7f43-11ed-8abf-dac502259ad0.png

改動2

184a2e5e-7f43-11ed-8abf-dac502259ad0.png

改動3

189f4ca4-7f43-11ed-8abf-dac502259ad0.png

改動4

191571cc-7f43-11ed-8abf-dac502259ad0.png

做完以上三處改動,即可參考UART·GitBook(t-head.cn)中的使用示例對uart5進(jìn)行驗證,注意需要先csi_pin_set_mux(PB4,PB4_UART5_TX);和csi_pin_set_mux(PB5,PB5_UART5_RX);

05項目總結(jié)

“我們對‘碳中和’比較感興趣,學(xué)校也鼓勵我們探索交叉學(xué)科,我負(fù)責(zé)系統(tǒng)架構(gòu)搭建和區(qū)塊鏈技術(shù),另外兩位隊員負(fù)責(zé)硬件編程及網(wǎng)頁編程。從最初簡單的能源物聯(lián)網(wǎng)演示,到利用區(qū)塊鏈技術(shù)實現(xiàn)M2M自主交易,我們做了很多討論和嘗試,終于在RISC-V平臺上跑通了程序!”“萌新隊”隊長、華東師范大學(xué)大四學(xué)生龔丹妮說。

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 能源系統(tǒng)
    +關(guān)注

    關(guān)注

    0

    文章

    114

    瀏覽量

    12210
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    26

    文章

    6291

    瀏覽量

    118141
  • RISC-V
    +關(guān)注

    關(guān)注

    48

    文章

    2886

    瀏覽量

    53025

原文標(biāo)題:應(yīng)用速遞 | 摘得頭獎的小隊究竟是做了什么項目?

文章出處:【微信號:芯片開放社區(qū),微信公眾號:芯片開放社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    探索RISC-V在機(jī)器人領(lǐng)域的潛力

    探索RISC-V在機(jī)器人領(lǐng)域的潛力 測評人:洄溯 測評時間: 2025年11月 測評對象: MUSE Pi Pro開發(fā)板(基于進(jìn)迭時空K1系列高性能
    發(fā)表于 12-03 14:40

    【CIE全國RISC-V創(chuàng)新應(yīng)用大賽】MUSE Pi Pro開發(fā)板ROS系統(tǒng)

    MUSE Pi Pro 搭載的處理器是SpacemiT M1,采用 RISC-V 指令集架構(gòu)(RV64GCV),8 核設(shè)計( 4 個高性能核心 + 4 個能效核心的異構(gòu)
    發(fā)表于 11-16 22:34

    全志D1開發(fā)板(哪吒 RISCV64)開箱評測

    1.概述 作為主打RISC-V架構(gòu)芯片的國產(chǎn)開發(fā)板,哪吒開發(fā)板這次的發(fā)布也算是良心之作。隨著第一批板子的公
    發(fā)表于 10-31 07:50

    d1哪吒開發(fā)板的啟動流程分析

    1.本文概述 2.D1上電后啟動的第一個程序 3.啟動SPL 4.啟動opensbi 5.裸機(jī)程序的編寫 6.小結(jié) 1.本文概述 從RISCV生態(tài)的角度上來看,D1哪吒
    發(fā)表于 10-29 06:44

    WEMOS D1 R32 用Arduino IDE 點燈程序 及搭建

    https://v.kuaishou.com/J43p6seX D1 R32 "Arduino IDE "閃爍 該作品在快手被播放過1次,點擊鏈接,打開【快手】直接觀看!
    的頭像 發(fā)表于 10-27 14:51 ?555次閱讀

    【CIE全國RISC-V創(chuàng)新應(yīng)用大賽】+基于MUSE Pi Pro的3d激光里程計實現(xiàn)

    激光里程計系統(tǒng)。 硬件組成 ?__MUSE Pi Pro開發(fā)板__?:搭載高性能RISC-V處理器 ?__速騰聚創(chuàng)Airy 96線激光雷達(dá)__?:高分辨率3D激光雷達(dá) ?__集成IMU
    發(fā)表于 10-24 17:02

    【匠芯創(chuàng)D133CBS KunLun Pi開發(fā)板試用體驗】1開發(fā)板開箱及介紹

    應(yīng)用于工業(yè) HMI、 網(wǎng)關(guān)、串口屏等泛工業(yè)和智慧家居領(lǐng)域。 D133CBS RISC-V KunLun Pi V1.0 是一款基于 D13x 芯片的人機(jī)交互應(yīng)用
    發(fā)表于 09-05 13:49

    【BPI-CanMV-K230D-Zero開發(fā)板體驗】開箱以及開發(fā)板簡介

    感謝香蕉派+發(fā)燒友組織的活動。 Banana Pi BPI-CanMV-K230D-Zero 采用嘉楠科技 K230D RISC-V芯片設(shè)計,探索 RISC-V Vector1.0 的
    發(fā)表于 08-25 22:49

    Comake D1 開發(fā)板 快速開始

    本文檔介紹了COMAKEPID1開發(fā)板的快速入門指南,包括硬件連接、AlkaidSDK環(huán)境搭建和示例程序開發(fā)。該開發(fā)板基于Pcupid系列SoC芯片,支持豐富的外設(shè)功能,適用于智能音頻
    的頭像 發(fā)表于 08-25 15:49 ?751次閱讀
    Comake <b class='flag-5'>D1</b> <b class='flag-5'>開發(fā)板</b> 快速開始

    Comake PI D1開箱使用體驗分享

    一顆針對智慧視覺、智慧音頻、智能機(jī)器人、小屏顯示等應(yīng)用的AI主控芯片SSD2355,并搭配該芯片重磅推出了Comake PI D1開發(fā)板,結(jié)合Comake 開發(fā)者社區(qū)的高效在線服務(wù)及AI 模型資源
    發(fā)表于 08-21 15:37

    星宸Comake PI D1開箱測評

    星宸Comake PI D1開箱測評 一、開箱 今日入手了星宸推出的一款帶ai計算的開發(fā)板,終于是到了,接下來享受開箱的樂趣。配件還是比較齊全的,總體外設(shè),功能是應(yīng)有盡有,總體感覺不錯。 這是開箱
    的頭像 發(fā)表于 08-21 15:18 ?3611次閱讀
    星宸Comake PI <b class='flag-5'>D1</b>開箱測評

    匠芯創(chuàng)D133CBS RISC-V KunLun Pi V1.0開發(fā)板開發(fā)資料

    開發(fā)板簡介 D13x 是 ArtInChip 一款基于 RISC-V 的高性能、國產(chǎn)自主、工業(yè)級全高清顯示與智能控制 MCU,配備強(qiáng)大的 2D 圖形加速處理器、 PNG 解碼、JPEG
    發(fā)表于 07-15 17:27

    搭載雙核玄鐵C908 ?RISC-V CPU,BPI-CanMV-K230D-Zero開發(fā)板試用

    K230D Zero ?開發(fā)板。這款創(chuàng)新的開發(fā)板是由嘉楠科技與香蕉派開源社區(qū)聯(lián)合設(shè)計研發(fā),搭載了先進(jìn)的勘智 K230D 芯片。 K230D
    的頭像 發(fā)表于 06-05 16:49 ?1598次閱讀
    搭載雙核玄鐵C908 ?<b class='flag-5'>RISC-V</b> CPU,BPI-CanMV-K230<b class='flag-5'>D</b>-Zero<b class='flag-5'>開發(fā)板</b>試用

    【免費試用】開發(fā)板評測大賽開啟!OH 、RISC-V、Rockchip頂級開發(fā)板等你試用~

    道OpenHarmony、RISC-V、Rockchip(下稱RK)全面覆蓋前沿技術(shù)方向,等你用代碼與創(chuàng)意點燃科技未來!——點擊開發(fā)板圖片立即申請————點擊開發(fā)板圖片立即申請———
    的頭像 發(fā)表于 06-05 08:05 ?975次閱讀
    【免費試用】<b class='flag-5'>開發(fā)板</b>評測大賽開啟!OH 、<b class='flag-5'>RISC-V</b>、Rockchip頂級<b class='flag-5'>開發(fā)板</b>等你試用~

    關(guān)稅取消后,國產(chǎn)的這款RISC-V開發(fā)板能否稱霸市場?進(jìn)迭時空Muse Pi Pro開發(fā)板

    在電子科技領(lǐng)域,一款國產(chǎn)開發(fā)板近期悄然嶄露頭角,吸引了全球的目光。它就是由國產(chǎn) RISC-V 芯片設(shè)計公司進(jìn)迭時空推出的 Muse Pi Pro 開發(fā)板。在當(dāng)今處理器設(shè)計領(lǐng)域,ARM
    的頭像 發(fā)表于 05-20 09:49 ?1257次閱讀
    關(guān)稅取消后,國產(chǎn)的這款<b class='flag-5'>RISC-V</b><b class='flag-5'>開發(fā)板</b>能否稱霸市場?進(jìn)迭時空Muse Pi <b class='flag-5'>Pro</b><b class='flag-5'>開發(fā)板</b>