作者:賴建宏
緣起
先前的開箱影片中我們可以看到Intel D2000開發板的一些特色,MakerPRO社團裡的幾位好手大大也都寫過有關Intel D2000的文章。從開箱影片中我們發現就硬體上來看Intel D2000的硬體規格跟Arduino Uno的接腳配置是一樣的,那各位可能就想問:「可不可以把Arduino那一大堆模組拿來套用?」於是,我們這次就真的挑一個Arduino初學者常用的火焰感測器,來試試看是不是真的可以在硬體上共通!
材料
- Intel D2000原廠開發板
- 火焰感測器模組(用LM393那種比較器、上面還有個可選轉的可變電阻那種)
- 公對母的杜邦線三條(VCC、GND、DO剛好三條)
接線的方式
特別說明一下,Intel D2000原廠開發板的輸出入電壓是 3.3VDC,和Arduino Uno的 5.0VDC 是不一樣的。如果接錯了,那就可能真的會把Intel D2000原廠開發板給搞壞掉囉~
常遇到很多人會問:「我那個模組一定要5.0VDC怎辦?」這時候我在這裡提供你兩個簡單解決方法:
- 電阻分壓:這方法超級便宜又簡單,問題在於假如是高速通訊裝置(像GHz級BUS線…等)的東西,這方法可能會變成阻抗不匹配,甚至波形失真嚴重根本無法使用喔!若是像先前的9600bps 那一類 TRX 倒是試過還可以使用。
- 加入Level shifter:由於需要購買元件,這個解決方式比較昂貴;可是如果像 I2C 那種接線不多的話,74LVC245這種就夠了!
步驟
有些 Quark的開發板需要得自己去張羅JTAG,但Intel D2000原廠開發板就是做的周詳,本身就有附上燒錄程式的訊號轉換器,不必另外找JTAG,直接接上USB就可以了。

Intel原廠D2000開發板已經內建JTAG轉換晶片模擬裝置,不用另外添購
接下來,我們就按照以下的圖片來試試看囉~

STEP1_眉角_記得開發板上D2000已經燒錄的內容,為了確保之後燒錄順利,先更新回出廠值

STEP2_建立一個新的專題

STEP3_指定是D2000

STEP4_採用QMSI也就Intel提供給Quark的軟體介面

STEP5_我們不必其他的裝置,只要用USB連上D2000即可,板子上已經有自動轉換的晶片

STEP6_啟用LED Blink的專題當範本

STEP7_眉角_在Makefile中加入這兩列,防止因為Windows下安裝一大把東東結果編譯不成功

STEP8_找到我們要改的主角main.c這個檔案
以下這些原始程式碼是要改到main.c中的,要注意目前Intel D2000還是得用Intel ISSM而不是Arduino IDE喔~
/*
* Copyright (c) 2017, Intel Corporation
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of the Intel Corporation nor the names of its
* contributors may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS”
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL CORPORATION OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
/*
* LED_Blink
*
* This app will blink an LED on the development platform indefinitely.
*
* In order for this application to work correctly on the Intel(R) Quark(TM)
* Microcontroller D2000 Development Platform, jumper J3 must be set to USR.
*/
#include “clk.h”
#include “qm_gpio.h”
#include “qm_pinmux.h”
#include “qm_pin_functions.h”
/*
* Laisan, 20171027, to define the PIN for flame sensor
*/
#define PIN_FLAME 2
#define FLAME_PIN_ID (QM_PIN_ID_2)
/* The following defines the pin and pin mux details for each SoC. */
#if (QUARK_SE)
#define PIN_OUT 25
#define LED_PIN_ID (QM_PIN_ID_59)
#define PIN_MUX_FN (QM_PIN_59_FN_GPIO_25)
#elif(QUARK_D2000)
#define PIN_OUT 24
#define LED_PIN_ID (QM_PIN_ID_24)
#define PIN_MUX_FN (QM_PIN_24_FN_GPIO_24)
#endif
#define DELAY 250000UL /* 0.25 seconds. */
static void pin_mux_setup(void)
{
qm_pmux_select(LED_PIN_ID, PIN_MUX_FN);
qm_pmux_select(FLAME_PIN_ID, PIN_MUX_FN);
}
int main(void)
{
qm_gpio_state_t state;
qm_gpio_port_config_t cfg;
/* Set the GPIO pin muxing. */
pin_mux_setup();
/* Loop indefinitely while blinking the LED. */
while (1) {
qm_pmux_pullup_en(PIN_FLAME, true);
qm_pmux_input_en(PIN_FLAME, true);
cfg.direction = 0;
qm_gpio_set_config(QM_GPIO_0, &cfg);
qm_gpio_read_pin(QM_GPIO_0, PIN_FLAME, &state);
if( state == 1 )
{
/* Set the GPIO pin direction to out and write the config. */
cfg.direction = BIT(PIN_OUT);
qm_gpio_set_config(QM_GPIO_0, &cfg);
qm_gpio_set_pin(QM_GPIO_0, PIN_OUT);
clk_sys_udelay(DELAY);
qm_gpio_clear_pin(QM_GPIO_0, PIN_OUT);
clk_sys_udelay(DELAY);
}
}
return 0;
}

STEP9_確認程式碼能照範例這樣,就編譯然後燒錄到D2000試試吧
最後,照例看展示影片吧:
結語
目前看來Intel D2000原廠開發板上手其實不算太麻煩,不過軟體程式跟Arduino IDE不一樣也沒附有內建的Serial給使用者,這兩點以外,我個人覺得就機能性來說算高的了!因為Intel D2000其實是有即時作業系統(Real-time Operating System,RTOS)的,跟Arduino Uno這類純粹只有微控器的開發板,兩者以汽車來比喻,Intel D2000好比雙B,而Arduino Uno就跟我開的國民車一樣。
所以要是開發更複雜的系統來說,Intel D2000原廠開發板可能會因為Real-time operating system的緣故,減少很多開發上的困難度。在目前智慧電子裝置市場越來越興盛的情況下,Intel D2000性能上還是可觀!
(責任編輯:葉于甄)
◎加入我們的Line,獲得更多及時文章更新&活動資訊→
- 【開箱評測】用Mbed上手開發DSI 2599開發板 - 2020/08/03
- 【OpenVINO™教學】自製麵包影像辨識POS機的應用 - 2019/12/24
- 【邊緣運算】OpenVINO好夥伴 — athena A1 Kit x86單板 - 2019/11/18
訂閱MakerPRO知識充電報
與40000位開發者一同掌握科技創新的技術資訊!