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

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

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

異構(gòu)R5實(shí)時(shí)系統(tǒng)開發(fā)筆記-基于芯馳D9360

米爾電子 ? 2024-06-13 08:01 ? 次閱讀

本篇測評由與非網(wǎng)的優(yōu)秀測評者“短笛君”提供。


本文將介紹基于米爾電子MYD-YD9360商顯板的R5協(xié)處理器開發(fā)方案測試。

本處參考對D9360中的協(xié)處理器進(jìn)行開發(fā)測試

開發(fā)之前請確認(rèn)編譯環(huán)境正常可以正常對鏡像進(jìn)行編譯

具體參考之前編譯Ubuntu系統(tǒng)文章,自行編譯buildroot系統(tǒng)測試

1.1打開RTOS驅(qū)動(dòng)

freeRTOS的源碼放在ssdk包下面,我們可以通過圖形化界面啟動(dòng)RTOS系統(tǒng)。D9的ssdk圖形化界面是通過menuconfig.sh腳本配置打開,此腳本在ssdk/tools下。以D9360為例,如下:

ddj@ubuntu:~/YD9X/MYD-YD9X-SDK_V1.0/source/ssdk$ pwd/home/ddj/YD9X/MYD-YD9X-SDK_V1.0/source/ssdk
~/MYD-JD9X-ubuntu/MYD-JD9X-SDK_V1.0/source/ssdk$ ./tools/menuconfig.sh -b d9360_ref -p ref -c secure

214c9af2-2918-11ef-bd4a-92fbcf53809c.png

2183e412-2918-11ef-bd4a-92fbcf53809c.png

1.2 添加RTOS例程驅(qū)動(dòng)

RTOS系統(tǒng)例程在examples/kunlun/drivers

ddj@ubuntu:~/YD9X/MYD-YD9X-SDK_V1.0/source/ssdk/examples/kunlun/drivers$ ls

21b35c2e-2918-11ef-bd4a-92fbcf53809c.png

21e740ac-2918-11ef-bd4a-92fbcf53809c.png

新建一個(gè)abc目錄

并配置Kconfig和rules.mk文件

22214036-2918-11ef-bd4a-92fbcf53809c.png


返回driver目錄下 配置Kconfig添加ABC去東門模塊初始狀態(tài)和圖形界面類型

ABC驅(qū)動(dòng)模塊的初始狀態(tài)和圖形界面類型

2253c664-2918-11ef-bd4a-92fbcf53809c.png


在rules.mk文件下,添加如下內(nèi)容

22849140-2918-11ef-bd4a-92fbcf53809c.png

MODULES += $(LOCAL_DIR)/abc: 如果配置選項(xiàng) CONFIG_ABC_TEST 為 "y",則會將 $(LOCAL_DIR)/abc 添加到變量 MODULES 中。這意味著當(dāng)啟用了 "ABC Test" 功能時(shí),會將 $(LOCAL_DIR)/abc 模塊添加到模塊列表中。

R5核數(shù)據(jù)發(fā)送到A55核中

將rpmsg目錄下的rpmsg_test.c文件復(fù)制到abc.c文件中,該驅(qū)動(dòng)描述如何通過RPMSG協(xié)議進(jìn)行核間通信。我們可以在此程序基礎(chǔ)上加入自己的協(xié)議,以下是R5核發(fā)送“Hello, RPMSG!”字符串到A55核,并打印出接收到的信息的函數(shù)。

void send_receive_string(rpmsg_channel_t channel, const char *message) {
int max_payload; struct dcf_ccm_hdr *snd_pkg; struct dcf_ccm_hdr *rcv_pkg; status_t ret;
max_payload = rpmsg_channel_max_payload(channel); snd_pkg = osAlloc(max_payload); rcv_pkg = osAlloc(max_payload); ASSERT(snd_pkg && rcv_pkg);
memset(snd_pkg, 0x0, max_payload); memset(rcv_pkg, 0x0, max_payload);
snd_pkg->dmsg.msg_type = COMM_MSG_CCM_ECHO; snd_pkg->dmsg.opflags |= DCF_MSGF_TMS; snd_pkg->dmsg.msg_len = sizeof(struct dcf_ccm_hdr) - sizeof(struct dcf_message);
strncpy(snd_pkg->data, message, max_payload - sizeof(struct dcf_ccm_hdr));
ret = rpmsg_channel_send(channel, RPMSG_ECHO_EPT_ADDR, snd_pkg, max_payload, 3000); if (ret == RPMSG_SUCCESS) { printf("Sent: %s\n", message); } else { printf("Failed to send message\n"); }
int received_len; ret = rpmsg_channel_recv(channel, rcv_pkg, max_payload, &received_len, 3000); if (ret == RPMSG_SUCCESS) { printf("Received: %s\n", rcv_pkg->data); } else { printf("Failed to receive message\n"); }
osFree(snd_pkg); osFree(rcv_pkg);}

將以上函數(shù)添加至abc.c文件內(nèi),并在主函數(shù)(rpmsg_test)編寫調(diào)用該函數(shù)條件,如下:

const char* message_to_send = "Hello,rpmsg";
if (argc == 0) { rpmsg_test_show(); goto exit; }
if (argc == 2) { test_case = 0; type = atoi(argv[0]); rproc = atoi(argv[1]); } else if (!strcmp(argv[0], "ping")) { test_case = 1; type = atoi(argv[1]); rproc = atoi(argv[2]); times = atoi(argv[3]); } else if (!strcmp(argv[0], "iperf")) { test_case = 2; type = atoi(argv[1]); rproc = atoi(argv[2]); times = atoi(argv[3]);}//新添加的條件 else if(!strcmp(argv[0], "send")){ test_case = 3; type = atoi(argv[1]); rproc = atoi(argv[2]); times = atoi(argv[3]); } else { printf("Unknown cmd %s\n", argv[0]); goto exit; }switch (test_case) { case 0: do_rpmsg_echo_test(channel); break;
case 1: do_rpmsg_ping_test(channel, times); break; case 2: do_rpmsg_iperf_test(channel, times); break;
case 3: send_receive_string(channel, message_to_send); break;
default: printf("Unknown case %d\n", test_case); break; }
//加入串口打印提示(跳至rpmsg_test_show函數(shù))printf("\nTest command:\n"); printf("\trpmsg_test \n"); printf("\trpmsg_test ping \n"); printf("\trpmsg_test iperf \n"); printf("\trpmsg_test send \n");
printf("\ne.g: test ping rpmsg.virtio 10 times with secure, use command:\n"); printf("\trpmsg_test ping 0 1 10\n");


通過5.1小節(jié)打開圖形化配置界面,進(jìn)入到Driver and Application Examples/Driver Example Support下,可以看到我們新加的abc test Support驅(qū)動(dòng)配置選項(xiàng),需要關(guān)閉RPMSG Example Application Support選項(xiàng),如下:

22a8d258-2918-11ef-bd4a-92fbcf53809c.png

22ec756c-2918-11ef-bd4a-92fbcf53809c.png

232938d0-2918-11ef-bd4a-92fbcf53809c.png

23597ffe-2918-11ef-bd4a-92fbcf53809c.png


選中此選項(xiàng)編譯進(jìn)內(nèi)核,將串口線(debug)接到10_TX,10_RX和GND,打開終端調(diào)試工具。編輯source/ssdk/ middleware/rpmsg_service/rpmsg_echo.c文件,添加代碼如下:

static int echo_channel_cb(void *data, int len, unsigned long src, void *arg){ rpmsg_channel_t chan = arg; struct dcf_ccm_hdr *ccm_pkg = data; const char *char_data = (char *)data; int ret = 0;
if (ccm_pkg->dmsg.msg_type == COMM_MSG_CCM_ECHO) { ccm_pkg->time[2] = timer_get_current_time(g_syscnt_timer) * g_sdrv_syscnt_dev.cnt_per_us; ret = rpmsg_channel_send(chan, src, data, len, 1000); printf("Sending data (length %d): ", len); for (int i = 8; i < len; i++) { printf("%c ", char_data[i]); } printf("\n"); } else if (ccm_pkg->dmsg.msg_type == COMM_MSG_CCM_ACK) { ret = rpmsg_channel_send(chan, src, (char *)"ACK", 4, 1000); ssdk_printf(SSDK_INFO,"send ACK\n"); } else { ssdk_printf(SSDK_WARNING, "echo_channel_cb: unknown %d bytes from addr %ld\n", len, src); }
if (ret != 0) { ssdk_printf(SSDK_WARNING, "echo_channel_cb: channel send failed\n"); }
return ret;}

A55發(fā)送數(shù)據(jù)給R5

自定義一個(gè)發(fā)送和接收字符串的函數(shù),如下:

int send_receive_string(int fd, const char *send_str,int ntimes, int seconds) { int i = 0, j = 0; int size, bytes_rcvd, bytes_sent; long elapse = 0;
err_cnt = 0; i_payload = (struct _payload *)malloc(sizeof(struct _payload) + payload_max_size); r_payload = (struct _payload *)malloc(sizeof(struct _payload) + payload_max_size);
if (i_payload == 0 || r_payload == 0) { printf("ERROR: Failed to allocate memory for payload.\n"); return -1; }
if (seconds) gettimeofday(&start_test, NULL);
i_payload->magic = 0xA5;
for (j = 0; j < ntimes; j++) { i_payload->num = i; i_payload->size = size; strcpy(i_payload->data, send_str);
if (verbose) printf("\r\n sending payload number"); if (verbose) printf(" %d of size %lu\r\n", i_payload->num, (sizeof(struct _payload)) + strlen(i_payload->data));
bytes_sent = write(fd, i_payload, sizeof(struct _payload) + strlen(i_payload->data)); if (bytes_sent <= 0) { if (verbose) { perror("\r\n Error sending data\n"); break; } else fprintf(stderr, "#");
err_cnt++; continue; } printf("send string:%s\n",i_payload->data);
r_payload->num = 0; bytes_rcvd = read(fd, r_payload, sizeof(struct _payload) + payload_max_size); while (bytes_rcvd <= 0) { usleep(10000); bytes_rcvd = read(fd, r_payload, sizeof(struct _payload) + payload_max_size); } r_payload->data[bytes_rcvd] = '\0'; printf("receive string:%s\n",r_payload->data);
if (interval) sleep(interval); }
free(i_payload); free(r_payload);
return 0;}

238bd062-2918-11ef-bd4a-92fbcf53809c.png


在main函數(shù)內(nèi)添加新增函數(shù)條件:

23b79170-2918-11ef-bd4a-92fbcf53809c.png

編輯source/linux/ drivers/rpmsg/virtio_rpmsg_bus.c文件,代碼如下:

23edcb28-2918-11ef-bd4a-92fbcf53809c.png

242280c0-2918-11ef-bd4a-92fbcf53809c.png


保存所有代碼

編譯系統(tǒng) 燒錄

21e740ac-2918-11ef-bd4a-92fbcf53809c.png

1.5結(jié)果顯示

在R5核調(diào)用rpmsg_test例程,向A55核發(fā)送信息

R5界面>rpmsg_test send 0 3 1>Sent: 123456789Received: 123456789
>rpmsg_test send 1 3 1>Sent: 123456789Received: 123456789
A55界面root@myd-jd9x:~# [ 22.223170] virtio_rpmsg_bus virtio0: virtio send susses[ 34.943644] sd,rpmsg-ipcc soc:ipcc@1: ipcc send susses

在A55核調(diào)用echo_test例程,向R5發(fā)送信息,打印如下:

A55界面root@myd-jd9x:~# echo_test -d virtio0.rpmsg-echo.-1.30 -c 1
Echo test startupdate rpmsg-mtu=496 from kernelsend string:Hello,RPMsg!receive string:Hello,RPMsg!
R5界面>Sending data (length 20): H e l l o , R P M s g !


MYC-YD9360核心板及商顯板

  • 采用國產(chǎn)CPU:集成了6個(gè)ARM Cortex-A55@1.6GHz 高性能CPU和1個(gè)ARM Cortex-R5@800MHz;
  • 高性能的高安全HSM安全的處理器,支持TRNG、AES、RSA、SHA、SM2/3/4/9;
  • 它包含100GFLOPS 3D GPU以及H.264和H.265/VP8/VP9視頻編/解碼器,三屏異顯;
  • 集成 PCIe3.0,USB3.0,2x千兆TSN以太網(wǎng),4xCAN-FD,16xUART,SPI 等豐富的外設(shè)接口
  • 工業(yè)級-40℃~85℃,郵票孔324PIN引腳,尺寸為52mmx50mm。
  • 應(yīng)用:高端商顯、新一代電力智能設(shè)備、工業(yè)互聯(lián)網(wǎng)設(shè)備、工業(yè)控制設(shè)備、工業(yè)機(jī)器人、工程機(jī)械、軌道交通等

247147dc-2918-11ef-bd4a-92fbcf53809c.jpg

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

    關(guān)注

    68

    文章

    18921

    瀏覽量

    227190
  • 實(shí)時(shí)系統(tǒng)

    關(guān)注

    0

    文章

    34

    瀏覽量

    14405
  • 米爾電子
    +關(guān)注

    關(guān)注

    0

    文章

    89

    瀏覽量

    414
收藏 人收藏

    評論

    相關(guān)推薦

    國產(chǎn)六核CPU,三屏異顯,賦能新一代商顯

    當(dāng)今時(shí)代,以數(shù)字化、網(wǎng)絡(luò)化、智能化為特征的第四次工業(yè)革命正在進(jìn)行,伴隨著國內(nèi)汽車新能源的普及,加速了國產(chǎn)高安全芯片的快速發(fā)展,D9360推出的一款六核CPU的高度集成、低功耗化、高安全性芯片
    發(fā)表于 12-22 18:07

    【米爾-D9360商顯板試用評測】2、配置QT開發(fā)環(huán)境

    【前言】 D9360商顯板,開發(fā)顯示界面,安裝QT的開發(fā)環(huán)境是邁出的第一步,所謂萬丈高樓平地起。邁開這一步,花了我整整兩天的時(shí)間,在這里先要給米爾的技術(shù)支持點(diǎn)個(gè)贊,特別是李工,耐心的指導(dǎo)我,邁出
    發(fā)表于 04-01 21:42

    【米爾-D9360商顯板試用評測】3、LED閃起來

    板,就得到了一個(gè)閃爍的LED的效果了: 【總結(jié)】 本次實(shí)驗(yàn),實(shí)現(xiàn)了QT定時(shí)器在米爾-D9360商顯板上的運(yùn)行,相比MCU開發(fā)板,有了QT的界入,在程序
    發(fā)表于 04-02 18:00

    【米爾-D9360商顯板試用評測】成功解決QCamera的模塊調(diào)用,并編寫簡單的查找攝像頭程序

    鑒于【新提醒】【米爾-D9360商顯板試用評測】QT5添加 multimedia multimediawidgets,提示找不到模塊 - 米爾電子 - 電子技術(shù)論壇 - 廣受歡迎的
    發(fā)表于 04-07 18:12

    【米爾-D9360商顯板試用評測】米爾-D9360商顯板開發(fā)環(huán)境搭建

    媒體方面的應(yīng)用。 米爾-D9360商顯板做工優(yōu)秀,PCB線路規(guī)整,芯片布局合理,各種元器件毫不節(jié)省,從板上密密麻麻的黃色貼片鉭電容可見一斑。 二、開發(fā)板網(wǎng)絡(luò)配置 簡單點(diǎn),直接修改
    發(fā)表于 04-09 22:39

    【米爾-D9360商顯板試用評測】使用ffmpeg實(shí)現(xiàn)遠(yuǎn)程視頻監(jiān)控

    【硬件】 1、米爾-D9360商顯板 2、usb攝像頭 【軟件】 1、ffmpeg 2、EasyDarwin 3、vlc播放器 【實(shí)現(xiàn)步驟】 1、從ffmpeg下載aarch64編譯好的版本
    發(fā)表于 04-11 13:07

    國產(chǎn)上運(yùn)行TinyMaxi輕量級的神經(jīng)網(wǎng)絡(luò)推理庫-米爾基于D9國產(chǎn)商顯板

    本篇測評由優(yōu)秀測評者“短笛君”提供。本文將介紹基于米爾電子MYD-YD9360商顯板(米爾基于D9360國產(chǎn)開發(fā)板)的TinyMaxi輕
    發(fā)表于 08-09 18:26

    基于STM32的USB程序開發(fā)筆記 匯總

    忙了一下午終于有時(shí)間整理了,基于STM32的USB程序開發(fā)筆記匯總,需要的親們點(diǎn)擊鏈接閱讀哈!{:4_95:}基于STM32的USB程序開發(fā)筆記(一)https://bbs.elecfans.com
    發(fā)表于 03-20 16:08

    迅為RK3568開發(fā)板Android11系統(tǒng)開發(fā)筆記分享

    1、迅為RK3568開發(fā)板Android11系統(tǒng)開發(fā)筆記Android11 預(yù)安裝應(yīng)用功能在進(jìn)行本章節(jié)時(shí),需要將迅為提供的Android11源碼編譯通過。Android11上的應(yīng)用預(yù)安裝功能,主要
    發(fā)表于 08-25 18:06

    【米爾-D9開發(fā)板- 國產(chǎn)平臺試用】-- 01 -- 開箱上電

    ,那么接下來說一下關(guān)于芯片的一些介紹吧。 D9其實(shí)是一個(gè)系列的代稱,這個(gè)系列有多款芯片自稱,單核、四核、八核,配套的還有R5實(shí)時(shí)協(xié)處理
    發(fā)表于 08-16 17:45

    STM32的USB程序開發(fā)筆記

    STM32的USB程序開發(fā)筆記
    發(fā)表于 09-29 14:55 ?27次下載
    STM32的USB程序<b class='flag-5'>開發(fā)筆記</b>

    六核國產(chǎn)CPU,自主可控、安全可信的高性能顯控方案

    前段時(shí)間,米爾上市了D9系列的國產(chǎn)核心板和開發(fā)板。這款核心板既能跑安卓、Linux、RTOS系統(tǒng),還有單核、雙核、
    的頭像 發(fā)表于 08-31 08:01 ?883次閱讀
    六核國產(chǎn)CPU,自主可控、安全可信的高性能顯控方案

    新品!D9-Pro六核國產(chǎn)CPU,自主可控、安全可信的高性能顯控方案

    前段時(shí)間,米爾上市了D9系列的國產(chǎn)核心板和開發(fā)板。這款核心板既能跑安卓、Linux、RTOS系統(tǒng),還有單核、雙核、
    的頭像 發(fā)表于 09-01 13:55 ?1248次閱讀
    新品!<b class='flag-5'>芯</b><b class='flag-5'>馳</b><b class='flag-5'>D</b>9-Pro六核國產(chǎn)CPU,自主可控、安全可信的高性能顯控方案

    米爾-D9360商顯板-國產(chǎn)六核CPU開發(fā)

    D9-Pro 自主可控、安全可信的高性能商顯方案采用國產(chǎn)CPU:集成了6個(gè)ARM Cortex-A55@1.6GHz 高性能CPU和1個(gè)ARM Cortex-R5@800MHz;高
    發(fā)表于 01-09 14:17 ?2次下載

    米爾-D9360商顯板開發(fā)環(huán)境搭建

    一、硬件介紹 米爾-D9360商顯板搭載的SoC為D9360。 ? 是公司推出的高性能嵌
    的頭像 發(fā)表于 04-10 09:42 ?624次閱讀
    米爾-<b class='flag-5'>芯</b><b class='flag-5'>馳</b><b class='flag-5'>D9360</b>商顯板<b class='flag-5'>開發(fā)</b>環(huán)境搭建