Lâu rồi K không làm về VĐK. Dịp 30/4 vừa rồi ở nhà chẳng làm gì, lục lọi đống file cũ bắt gặp cái board LPC2106 mà mình đã làm, 25/02/2002, mới đây mà đã 7 năm, công nhận thời gian qua nhanh kinh khủng. Cái board hồi trước chẳng có gì ngoài con LPC2106 và cũng là board ARM đầu tiên của K.
Nó bèo nhèo như thế này nè!
Lấy cái shcematic cũ thêm mắm thêm muối nâng cấp thêm vài tính năng hỗ trợ đọc thẻ nhớ, giao tiếp LAN. VN hiện nay khác so với lúc trước nhiều, mua được con ARM7 của NXP tương đối dzễ, chứ không phải chạy vạy đi "xin đểu" như hồi xưa. Tạm thời đặt tên board là TW2106 để lấy hên vậy.
@TW2106: Tiny Web LPC2106.
Đặc tính:
+ MCU LPC2106 (Tương thích LPC2103, LPC2104, LPC2105).
+ Clock 60 Mhz (maximum).
+ Ethernet interface.
+ MicroSD interface.
Kích thước PCB:
+ Board dạng stamp module, kích thước 2cm x 6cm.
Ứng dụng:
+ lwIP TCP IPstack, chạy các ứng dụng telnet, smtp, webserver...
+ ELFS embedded file system.
+ MP3 player.
+ FreeRTOS demo.
Tools:
+ Winarm GNU GCC (recommended).
+ Keil MDK for ARM
+ Crossworks for ARM.
@IP Stack cho Microcontroller:
Có nhiều source hỗ trợ TCP IP stack cho Microcontroller:
+ uIP (verry small).
+ lwIP (BSD compatible API).
+ openTCP.
+ nichelite.
+ ucIP.
+ Microchip TCPIP.
...
@Tại sao phải là lwIP ?
+ lwIP support các hàm API tương tự như BSD giúp người sử dụng (quen với lập trình UNIX) triển khai ứng dụng nhanh chóng.
+ lwIP = Light weight IP stack: yêu cầu resource nhỏ gọn.
+ Hỗ trợ nhiều interface.
+ Có thể chạy standalone mode hoặc OS mode.
+ Portting khá đơn giản.
@Embedded Ethernet Controller:
+ RTL8109as
+ ENC28J60
+ LAN911
+ ...
@ Tại sao phải là ENC28J60 ?
+ Có bán sẵn ở Việt Nam.
+ Rẻ tiền.
+ Low pincount thích hợp với microcontroller cấu hình nhỏ.
@ lwip portting:
+ low_level_input () : for incomming packets
+ low_level_output () : for out going packets
+ Add inteface:
+ Ứng dụng web:
@ Kiểm tra kết nối:
@ Chạy ứng dụng webserver:
Ai có hứng với ARM7 cùng nhau thảo luận he!
Nó bèo nhèo như thế này nè!
Lấy cái shcematic cũ thêm mắm thêm muối nâng cấp thêm vài tính năng hỗ trợ đọc thẻ nhớ, giao tiếp LAN. VN hiện nay khác so với lúc trước nhiều, mua được con ARM7 của NXP tương đối dzễ, chứ không phải chạy vạy đi "xin đểu" như hồi xưa. Tạm thời đặt tên board là TW2106 để lấy hên vậy.
@TW2106: Tiny Web LPC2106.
Đặc tính:
+ MCU LPC2106 (Tương thích LPC2103, LPC2104, LPC2105).
+ Clock 60 Mhz (maximum).
+ Ethernet interface.
+ MicroSD interface.
Kích thước PCB:
+ Board dạng stamp module, kích thước 2cm x 6cm.
Ứng dụng:
+ lwIP TCP IPstack, chạy các ứng dụng telnet, smtp, webserver...
+ ELFS embedded file system.
+ MP3 player.
+ FreeRTOS demo.
Tools:
+ Winarm GNU GCC (recommended).
+ Keil MDK for ARM
+ Crossworks for ARM.
@IP Stack cho Microcontroller:
Có nhiều source hỗ trợ TCP IP stack cho Microcontroller:
+ uIP (verry small).
+ lwIP (BSD compatible API).
+ openTCP.
+ nichelite.
+ ucIP.
+ Microchip TCPIP.
...
@Tại sao phải là lwIP ?
+ lwIP support các hàm API tương tự như BSD giúp người sử dụng (quen với lập trình UNIX) triển khai ứng dụng nhanh chóng.
+ lwIP = Light weight IP stack: yêu cầu resource nhỏ gọn.
+ Hỗ trợ nhiều interface.
+ Có thể chạy standalone mode hoặc OS mode.
+ Portting khá đơn giản.
@Embedded Ethernet Controller:
+ RTL8109as
+ ENC28J60
+ LAN911
+ ...
@ Tại sao phải là ENC28J60 ?
+ Có bán sẵn ở Việt Nam.
+ Rẻ tiền.
+ Low pincount thích hợp với microcontroller cấu hình nhỏ.
@ lwip portting:
+ low_level_input () : for incomming packets
Code:
for(q = p; q != NULL; q = q->next) { memcpy ((uint8_t*)q->payload, (rxtxBuf + l), q->len); l += q->len; }
Code:
for(q = p; q != NULL; q = q->next) { if (((unsigned int)len + q->len) >= (unsigned int) ETH_FRAG_SIZE) { error = 1; break; } memcpy ((rxtxBuf + len), (uint8_t*)q->payload, q->len); len += q->len; }
Code:
netif_add(netif_eth0, &my_ipaddr_data, &my_netmask_data, &my_gw_data, NULL, ethernetif_init, ip_input); netif_set_default(netif_eth0); netif_set_up(netif_eth0);
Code:
struct tcp_pcb* tcpweb; struct tcp_pcb* tcpweb_listen; tcpweb = tcp_new(); if (tcpweb == NULL) return; /* Bind to port 80 for any address */ if (tcp_bind(tcpweb, IP_ADDR_ANY, 80) != ERR_OK) return; tcpweb_listen = tcp_listen(tcpweb); if (tcpweb_listen == NULL) { tcp_abort(tcpweb); tcpweb = NULL; return;
@ Chạy ứng dụng webserver:
Ai có hứng với ARM7 cùng nhau thảo luận he!
Comment