99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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

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

01項(xiàng)目介紹

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

02技術(shù)方案

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

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

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

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

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

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

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

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

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

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

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問(wèn)題匯總

uart的配置

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

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

改動(dòng)1

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

改動(dòng)2

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

改動(dòng)3

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

改動(dòng)4

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

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

05項(xiàng)目總結(jié)

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

審核編輯 :李倩

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

    關(guān)注

    0

    文章

    98

    瀏覽量

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

    關(guān)注

    25

    文章

    5675

    瀏覽量

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

    關(guān)注

    46

    文章

    2562

    瀏覽量

    48778

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

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

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

    開發(fā)板簡(jiǎn)介 D13x 是 ArtInChip 一款基于 RISC-V 的高性能、國(guó)產(chǎn)自主、工業(yè)級(jí)全高清顯示與智能控制 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è)計(jì)研發(fā),搭載了先進(jìn)的勘智 K230D 芯片。 K230D
    的頭像 發(fā)表于 06-05 16:49 ?527次閱讀
    搭載雙核玄鐵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èi)試用】開發(fā)板評(píng)測(cè)大賽開啟!OH 、RISC-V、Rockchip頂級(jí)開發(fā)板等你試用~

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

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

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

    請(qǐng)問(wèn)TVP5158分辨率D1與HalfD1是如何轉(zhuǎn)換的?

    這段時(shí)間在調(diào)試TVP5158模擬視頻采集芯片,發(fā)現(xiàn)輸出數(shù)據(jù)有三種分辨率D1、HalfD1和CIF,手冊(cè)上面只是說(shuō)明了D1、HalfD1和CIF三者的水平像素點(diǎn)和垂直行數(shù)的關(guān)系,但是這
    發(fā)表于 12-23 06:31

    RISC-V架構(gòu)及MRS開發(fā)環(huán)境回顧

    ,華為海思轉(zhuǎn)向了開源指令集架構(gòu)RISC-V,針對(duì)鴻蒙操作系統(tǒng)的開發(fā)者發(fā)布了首款RISC-V開發(fā)板Hi3861。Hi3861針對(duì)的是物聯(lián)網(wǎng)市場(chǎng)
    發(fā)表于 12-16 23:08

    SiFive 推出高性能 Risc-V CPU 開發(fā)板 HiFive Premier P550

    “ ?HiFive Premier P550:世界上性能最高的 RISC-V CPU 開發(fā)板, Mini-DTX 外形提供高性能 Linux 開發(fā)平臺(tái),支持下一波
    的頭像 發(fā)表于 12-16 11:16 ?1786次閱讀
    SiFive 推出高性能 <b class='flag-5'>Risc-V</b> CPU <b class='flag-5'>開發(fā)板</b> HiFive Premier P550

    如何使用 RISC-V 進(jìn)行嵌入式開發(fā)

    、準(zhǔn)備開發(fā)環(huán)境 選擇開發(fā)板RISC-V架構(gòu)的嵌入式開發(fā)板有多種選擇,如GD32VF103R-START、飛凌嵌入式OK113i-S等。選
    的頭像 發(fā)表于 12-11 17:32 ?1934次閱讀

    Made with KiCad(十六):全志RISC-V 64 SoC F133/D1s開發(fā)板

    Linux 的開發(fā)板一起推出的全志D1 RISC-V 處理器的低成本版,它和D1的主要區(qū)別在于D1s內(nèi)置的RAM是 64MB DDR2。
    的頭像 發(fā)表于 12-04 18:22 ?4522次閱讀
    Made with KiCad(十六):全志<b class='flag-5'>RISC-V</b> 64 SoC F133/<b class='flag-5'>D1</b>s<b class='flag-5'>開發(fā)板</b>

    關(guān)于RISC-V學(xué)習(xí)路線圖推薦

    )、密碼指令集(C)等。 RISC-V架構(gòu)特性 : 掌握RISC-V的精簡(jiǎn)、模塊化、可擴(kuò)展性和可裁剪性等特性。 三、RISC-V開發(fā)工具與環(huán)
    發(fā)表于 11-30 15:21

    【RA8D1試用活動(dòng)】RA8D1B-CPKCOR開發(fā)板移植linux

    【RA8D1試用活動(dòng)】RA8D1B-CPKCOR開發(fā)板移植linux
    的頭像 發(fā)表于 11-16 01:02 ?917次閱讀
    【RA8<b class='flag-5'>D1</b>試用活動(dòng)】RA8<b class='flag-5'>D1</b>B-CPKCOR<b class='flag-5'>開發(fā)板</b>移植linux

    香蕉派開發(fā)板BPI-CanMV-K230D-Zero 嘉楠科技 RISC-V開發(fā)板開發(fā)

    K230D Zero 開發(fā)板。這款創(chuàng)新的開發(fā)板是由嘉楠科技與香蕉派開源社區(qū)聯(lián)合設(shè)計(jì)研發(fā),搭載了先進(jìn)的勘智 K230D 芯片。 K230D
    發(fā)表于 11-05 15:29

    香蕉派開發(fā)板BPI-CanMV-K230D-Zero 嘉楠科技 RISC-V開發(fā)板開發(fā)

    科技 K230D RISC-V芯片設(shè)計(jì),探索 RISC-V Vector1.0 的前沿技術(shù),選擇嘉楠科技的 Canmv K230D Zero 開發(fā)板
    的頭像 發(fā)表于 11-05 15:27 ?1460次閱讀
    香蕉派<b class='flag-5'>開發(fā)板</b>BPI-CanMV-K230<b class='flag-5'>D</b>-Zero 嘉楠科技 <b class='flag-5'>RISC-V</b><b class='flag-5'>開發(fā)板</b>公<b class='flag-5'>開發(fā)</b>售

    香蕉派 BPI-CanMV-K230D-Zero 采用嘉楠科技 K230D RISC-V芯片設(shè)計(jì)

    開發(fā)板采用的是嘉楠科技Kendryte?系列AIoT芯片中的最新一代SoC芯片K230D。該芯片采用全新的多異構(gòu)單元加速計(jì)算架構(gòu),集成了2個(gè)RISC-V高能效計(jì)算核心,內(nèi)置新一代KPU
    發(fā)表于 07-30 17:43

    Banana Pi BPI-CanMV-K230D-Zero 采用嘉楠科技 K230D RISC-V芯片設(shè)計(jì)

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