串列埠AT命令的困窘

2021-06-07 16:11:42 字數 4322 閱讀 6559

最近在arm11上整乙個東西,用串列埠藍芽模組,接到主機板上,通過向藍芽傳送at命令,讀取反饋資訊。

1.暫不帶作業系統,我已經加入ramdisk檔案系統。

2.在檔案系統裡執行linux應用程式。

這裡是串列埠操作測試程式,與下列的驅動同步:

#include

#include

#include //open(), read(), write()  

#define bufsize 100  

int main(int argc, char* argv)  

ret = write(fd, msg, strlen(msg));  

//printf("envi 1\n");

if(ret < 0)  

//printf("envi 2\n");

while(1)  

//printf("envi 4\n");

if(buf[0] != '\0')  

}  return 0;   

}3.我自己也寫了個串列埠驅動。uart3口接藍芽。**如下:

#if 1

#include

#include

#include

#include

#include //copy_to_use, copy_from_user  

#include

#include

#include //readl, readb, writel, writeb  

#define bufsize 100  

#define ttys3_major 240  

#define elfin_uart_base        0xec800000

#define elfin_uart3_offset    0x0c00

#define iobase      (elfin_uart_base + elfin_uart3_offset)

#define uart_ulcon3 iobase  

#define uart_ucon3  (iobase + 0x4)  

#define uart_ufcon3 (iobase + 0x8)

#define uart_umcon3 (iobase + 0x0c)   

#define uart_utrstat3   (iobase + 0x10)

#define uart_ufstat3     (iobase + 0x18)  

#define uart_utxh3  (iobase + 0x20)  

#define uart_urxh3  (iobase + 0x24)  

#define uart_ubrdiv3    (iobase + 0x28)  

#define uart_udivslot3  (iobase + 0x2c)

#define uart_uintp3   (iobase + 0x30)

#define uart_uintsp3  (iobase + 0x34)

#define uart_uintm3   (iobase + 0x38)  

#if 0

#define ulcon_offset        0x00

#define ucon_offset        0x04

#define ufcon_offset        0x08

#define umcon_offset        0x0c

#define utrstat_offset        0x10

#define uerstat_offset        0x14

#define ufstat_offset        0x18

#define umstat_offset        0x1c

#define utxh_offset        0x20

#define urxh_offset        0x24

#define ubrdiv_offset        0x28

#define udivslot_offset        0x2c

#define uintp_offset        0x30

#define uintsp_offset        0x34

#define uintm_offset        0x38

#endif

/*void writel(char value,long reg)  

char read(long reg) (

return *(volatile unsigned char *)(elfin_uart_console_base3 + utxh_offset);

}*/int envi_open(struct inode *inode, struct file *filp)  

ssize_t envi_write(struct file *filp, const char __user *buf, size_t count, loff_t *f_pos)  

;  int state;  

int i = 0,temp;  

copy_from_user(wbuf, buf, count);  

while(wbuf[i] != '\0')  

}  for(temp = 0; temp < 600000 ; temp++)

else

break;

if(temp == 600000)

}return 0;  

}  //export_symbol_gpl(uart3_write);

ssize_t envi_read(struct file *filp, char __user *buf, size_t count, loff_t *f_ops)  

;  int state;  

state = readl(uart_utrstat3);  

if((0x01 & state) == 1)  

else  

return 0;  */

//envi rewrite

char rbuf[64]=;

int ufstat_reg,i;

char fifocount, ufstat3, rxdataready,rxchar,uintpreg,uintmreg;

ufstat_reg = readl(uart_ufstat3);

fifocount = ufstat_reg & 0x3f;

ufstat3 = (ufstat_reg & (1<<6))&0xff;

if(ufstat3 || fifocount > 0)

rxdataready = 1;

else

rxdataready = 0;

while(rxdataready)

copy_to_user(buf, rbuf, i);

printk("i:%d\n",i);

writel((readl(uart_uintsp3)|0x01),uart_uintsp3);

uintpreg = readb(uart_uintp3);

uintmreg = readb(uart_uintm3);

if((uintpreg & 0x01)||(uintpreg & 0x02))

else

uintmreg &= ~0x01;    

return 0;

}  //export_symbol_gpl(uart3_read);

int envi_release(struct inode *inode, struct file *filp)  

struct file_operations ttys3_fops =   

;  static __init int envi_init(void)  

return 0;   

}  static __exit void envi_exit(void)  

module_init(envi_init);  

module_exit(envi_exit);  

module_author("envi");  

module_description("s5p6450 serial driver");  

module_license("gpl");

#endif

有問題:

modprobe used greatest stack depth: 5608 bytes left                             

各位大蝦,有什麼好的建議嗎?困惑ing.

linux下串列埠檢視命令

1 檢視串列埠是否可用 可以對串列埠傳送資料比如對com1口,echo dev ttys0 2 檢視串列埠名稱使用 ls l dev ttys 一般情況下串列埠的名稱全部在dev下面,如果你沒有外插串列埠卡的話預設是dev下的ttys 一般ttys0對應com1,ttys1對應com2,當然也不一定...

「串列埠命令字解析」測試

實驗平台 stm32f103開發板 串列埠例程參考 戰艦例程 目錄前言 測試過程 程式設計 測試 注意事項 測試結果 總結 串列埠命令字解析,多用於裝置測試。由生產裝備 測試裝置 傳送命令資料幀給被測裝置,被測裝置接收命令資料幀並返回相應的引數。通過這些引數,我們可以得知被測裝置是否有故障,也可獲得...

linux串列埠命令列除錯

測試傳送 echo 123456 dev ttys1 測試接收 busybox microcom s 115200 dev ttys1 引數 s 波特率 t 超時退出時間 不加 t就是一直等待接收 例如 1.將arm機器的串列埠1接電腦 電腦開個串列埠工具設定波特率115200 2.busybox ...