ENC28J60 Ethernet module เป็น module ที่มีคุณสมบัติในการทำ Internet protocol ใช้ microship EN28J60 ในการทำงาน ซึ่งคุณสมบัติคร่าวๆของ module ชิ้นนี้มีดังนี้
- ใช้บัส SPI เป็น interface ในการเชื่อมต่อกับโมดูล
- รองรับการใช้งาน TCP/IP protocal, IPv4, UDP, TCP, DHCP, ICMP, FTP และ HTTP
- ใช้แรงดันไฟเลี้ยง 3.3v
- ความถี่ของสัญญาณ clock ที่ป้อนให้กับ Ethernet โมดูล 25MHz
สำหรับคนที่สนใจรายละเอียดทั้งหมดสามารถดูได้ที่ ลิงค์
สำหรับการนำ Enthernet โมดูล ENC28J60 มาใช้งานร่วมกับบอร์ด STM32F3Discovery นั้นเราได้ทำการดัดแปลง Library มากจาก arduino_uip ซึ่งเป็น Library ที่ใช้งานกับบอร์ด Arduino สามารถดาวน์โหลด arduino_uip Library ที่นี่
เราได้ทำการปรับแก้ไขโค้ดที่อยู่ภายในไฟล์ utility/Enc28J60Network.cpp จากเดิมที่คำสั่งสำหรับการทำงานต่างๆ จะเป็นของบอร์ด Arduino ก็ได้ทำการเปลี่ยนให้เป็นการทำงานของบอร์ด STM32F3Discovery แทน เช่นตัวอย่างดังด้านล่าง
โค้ดสำหรับ Arduino
void Enc28J60Network::writeByte(uint16_t addr, uint8_t data)
{
writeRegPair(EWRPTL, addr);
CSACTIVE;
// issue write command
SPDR = ENC28J60_WRITE_BUF_MEM;
waitspi();
// write data
SPDR = data;
waitspi();
CSPASSIVE;
}
โค้ดสำหรับ STM32F3void Enc28J60Network::writeByte(uint16_t addr, uint8_t data) {
writeRegPair(EWRPTL, addr);
HAL_GPIO_WritePin(_cs,_cs_num,GPIO_PIN_RESET); //_cs = 0;
uint8_t temp = (uint8_t)ENC28J60_WRITE_BUF_MEM;
// issue write command
HAL_SPI_Transmit(_spi,&temp,sizeof(temp),1000); //_spi.write(ENC28J60_WRITE_BUF_MEM);
// write data
HAL_SPI_Transmit(_spi,&data,sizeof(data),1000); //_spi.write(data);
HAL_GPIO_WritePin(_cs,_cs_num,GPIO_PIN_SET); //_cs = 1;
}
- จากตัวอย่าง จะเห็นได้ว่าโค้ดที่ทำการเปลี่ยนส่วนใหญ่ จะเป็นโค้ดในส่วนการทำงานของ SPI ซึ่งเราจะต้องเปลี่ยนส่วนนี้ทั้งหมดในไฟล์ utility/Enc28J60Network.cpp จากเดิมที่ใช้งานสำหรับบอร์ด Arduino ให้มาเป็นการใช้งาน SPI ของบอร์ด STM32F3 แทน สำหรับ Library ที่ได้ทำการเปลี่ยนแปลงเพื่อให้งานกับบอร์ด STM32F3 สามารถดาวน์โหลดได้ ที่นี่
สำหรับตัวอย่างการใช้งาน Library กับบอร์ด STM32F3Discovery สามารถอ่านได้จากบทความ "ทดลองอ่านค่าจาก ADC และส่งค่าผ่าน UDP Protocol" อ่านบทความ

ไม่มีความคิดเห็น:
แสดงความคิดเห็น