SPI通訊應用:
- 大多應用Microcontroller,與Microcontroller,或其他週邊如:EEPROM、Shift Register、Display driever、A/D Converter等,進行通訊。
SPI介面包含:
- SS (Slave Select)
- SCK (Serial Clock)
- SDI (Serial Data Input)
- SDO (Serial Data Output)
SPI接續說明:
SPI是一種4線全雙工同步序列通訊協定,採用Master-Slave控制方式;可採Single Master對Single Slave,也可採Single Master對Multi-Slave進行接續。
其中Single Master對Multi-Slave接續方式,具有:
一般接續方式:Master使用多組SS Pin來接續不同Slave,每次傳送/接收時,透過不同SS Pin,來決定與哪組Slave進行通訊。
Daisy-Chain接續方式:Master使用1組SS Pin來接續多個Slave,不同Slave裝置,SDI/ SDO串接在一起,如同Shifte Register。
(http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus
http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus)
SPI傳輸/接收方法:
當Slave的SS腳位被拉為Low准位時,此Slave在Master開始送出Clock信號後,將與Master,透過SPI Pin與SDO Pin進行傳送/接收。
- 其中Clock信號,可依照idle State為high/ low;以及傳輸資料時,是由clock idle至clock active,或clock active至clock idle分為4種波形。
- Master要進行資料傳送時,SCK才會有Clock信號,因此SPI傳輸/接收,可依下面3種狀況進行:
- Master與Slave皆要進行資料傳輸與接收:Master sends useful data and slave sends useful data.
- 僅Master進行資料傳輸:Master sends useful data and slave sends dummy data.
- 僅Master進行資料接收:Master sends dummy data and slave useful dummy data.
(Embeded system) I2C, Inter-Integrated Circuit Bus
I2C通訊應用:
- 於Microcontroller中,利用兩根通用的輸入輸出接腳及軟體的規劃,可以讓微控制器控制一個小型網路。週邊應用部份包含,AD Converter、DA Converter、RTC等。
I2C介面包含:
- SCL (Serial Clock),由Master產生Clock信號。
- SDA (Serial Data),SDA使用一上拉電阻,將電壓準位拉為High。
I2C接續說明:
- I2C是一種單工同步串列通訊協定,採用2線接續(SCL、SDA),為Multi-Master - Muti-Slave架構,將所有裝置的SCL並聯、SDA並聯。(http://zh.wikipedia.org/wiki/I%C2%B2C)
I2C通訊說明:
- I2C採用7 bits /10 bits Address進行Slave定址,符合Master定址的Slave裝置,與Master進行通訊。
I2C專有名詞:
- Idle State:SDA與SCL皆為High,2 Bus未被任一Master裝置佔用。
- Active State:SDA與SCL被任一Master裝置佔用。
- Start Condition:Master發出的訊號 (SCL為high時,使SDA由high->low)。
- Addressed Slave:
使用7bits address定址:
Master傳送Start Condition後,會傳送7 bits Address、1 bit Read/ Write Request,
共1Byte的資料至SDA上,Slave裝置的address,若與該address相符, 將會回覆ACK給Master裝置,並開始進行Transmit/ Receive使用10bits address定址:
Master傳送Start Condition後,之後會先傳送11110、10th Address、
9th bit Address、1 bit Read/ Write Request,共1Byte的資料至SDA上,
Slave裝置的address,若與該address相符,將會回覆ACK給Master裝置,
Master再傳送8th~1th address,共1Byte的資料至SDA上,Slave裝置的address,若與該address相符,將會回覆ACK給Master裝置。Read / Write Request
- 若Read/ Write Request為low,Addressed Slave將進行Data接收;
- 若Read/ Write Request為high,Addressed Slave將進行Data傳送;
Acknowledge
- Receiver (Master/ Slave)接收每一Byte Address or Data後,會回覆ACK或NACK給Transmitter((Master/ Slave)),告知Transmitter是否繼續通訊。
Clock Stretching:
Slave利用將SCL維持拉至Low,來暫停通訊,可獲得時間處理接收資料,通常再Acknowledge前或Acknowledge後實施。Stop/ Restart Condition:
- 若Master想結束通訊,釋放SDA和SCL,使Bus重新處於Idle狀態,可發送Stop Condition (SCL為high時,使SDA由low->high)。
- 若Master不想釋放SDA和SCL,重新進行Addressed Slave和Read/ Write Request,可再次發送Start Condition,稱之Restart Condition (SCL為high時,使SDA由high->low)。
Bus Collision and Arbitration
- Bus Collision: 當兩個裝置以上,通常為兩個master裝置,同時使用SDA,SCL時,進行資料傳送;當然也有可能是兩個slave裝置(ex:兩個slave設定相同address),但這情況非一般狀況。
Arbitration:
- 確保同時間一個master裝置佔住Bus傳輸的方法,當進行傳輸時,若傳送high準位時,會觀察輸出的準位是否為high,若為low的話,則進行停止傳送;因此,若兩裝置(A,B)同時進行傳送時,其中一裝置A輸出為low準位,另一裝置B輸出為high準位,則裝置A贏得Arbitration,可以確保訊息不被篡改。 (http://www.2cm.com.tw/technologyshow_content.asp?sn=0701010539)
Gitolite Server on MAC
Gitolite Server,是一款基於Perl語言開發的Git管理工具,
使用SSH Key認證,可依不同使用者,對Repo、Branch、Tag,
進行不同授權(讀取、重置、創建、刪除等)
Gitolite server在MAC上安裝與建置方法:
Step1: 安裝Gitolite server
git clone git://github.com/sitaramc/gitolite gitolite/install -to -ln /usr/local/bin
Step2: 產生1組ssh key
Step3: 將Public Key Copy至gitolite server底下
Step4: 產生Gitolite Administrator
gitolite setup -pk /path/to/YourName.pub
Step5: Administrator管理用戶
建立一般用戶:
設定一般用戶權限:
(MAC) MacPorts
Debian/ Ubuntu的套件管理工具有apt-get
RedHat/ Suse的套件管理工具有yum
相對應的MAC的套件管理工具則有MacPorts
安裝方法
可以根據MAC OS版本(Sierra, El Capitan, Yosemite,…)直接下載.pkg檔案
執行.pkg 檔案,按照步驟提示完成安裝,就可以完成 MacPorts 的基礎安裝
使用方法
安裝後系統提供一個port命令列指令。
打開終端機程式,先進行軟體清單更新。
sudo port -d selfupdate
列出所有軟體使用:
port list
搜尋某個軟體:
port search <name>
安裝個軟體,則使用:
port install <name>
(MAC)(Git) Gerrit Server
Git on MAC [By Homebrew]
Install XCode for (GCC tools)
Install Homebrew
ruby -e "$(curl -fsSL https://gist.github.com/raw/323731/install_homebrew.rb)"
Install Git (By homebrew)
brew install git
brew list
brew list git
Git on MAC [By Macports]
Install Macports
Install Git (By Macports)
sudo port install git-core
Gerrit on MAC:
Install MYSQL
- Get Mysql from official site (Mysql Community version)
Get Mysql Java Connector (Connector/J, .jar)
- Copy to /Library/Java/Extensions/
Setup Mysql-DB
mysql -u root -p CREATE USER 'gerrit'@'localhost' IDENTIFIED BY 'password'; CREATE DATABASE reviewdb; ALTER DATABASE reviewdb charset=latin1; GRANT ALL ON reviewdb.* TO 'gerrit'@'localhost'; FLUSH PRIVILEGES;
Get Gerrit from http://code.google.com/p/gerrit/downloads/list
Install Gerrit
java -jar gerrit.war init -d review_sit
Setup Gerrit Authentication by Http
Setup Apache /etc/apache2/httpd.conf as:
Listen 9090 #Gerrit Reverse Apache for Authentication <VirtualHost *:9090> ServerName Gerrit ProxyRequests Off ProxyVia Off ProxyPreserveHost On <Proxy *> Order deny,allow Allow from all </Proxy> <Location /gerrit/login/> AuthType Basic AuthName "Gerrit Code Review" AuthBasicProvider file AuthUserFile /Users/shiunyi/gerrit/review_site/etc/gerrit.passwd Require valid-user </Location> ProxyPass /gerrit/ http://localhost:8081/gerrit/ </VirtualHost>
Setup account of Gerrit
htpasswd -m /Users/shiunyi/gerrit/review_site/etc/gerrit.passwd NeilLee
Start Gerrit
gerrit/review_site/bin/gerrit.sh start
Web login
gerrit.config
[gerrit] basePath = git [database] type = MYSQL hostname = localhost database = reviewdb username = gerrit [auth] type = HTTP [sendemail] enable = true smtpServer = smtp.gmail.com smtpServerPort = 465 smtpEncryption = SSL smtpUser = user@gmail.com smtpPass = user = gerrit javaHome = /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home [sshd] listenAddress = *:29418 [httpd] listenUrl = proxy-http://*:8081/gerrit [cache] directory = cache
Using Gerrit
SSH authentication
client:
ssh-keygen -t rsa pbcopy < ~/.ssh/id_rsa.pub
Gerrit server:
- Add your ssh key to gerrit
- Restart gerrit server
Gerrit client:
ssh -p 29418 <your username in gerrit>@<gerrit's IP>
Gitweb Server on MAC
安裝gitweb
git clone git://git.kernel.org/pub/scm/git/git.git cd git/ sudo make GITWEB_PROJECTROOT="/Users/<user>/repositories" \ GITWEB_CSS="/gitweb/gitweb.css" \ GITWEB_LOGO="/gitweb/git-logo.png" \ GITWEB_FAVICON="/gitweb/git-favicon.png" \ bindir=//usr/local/bin \ gitweb sudo make gitwebdir=/var/www/gitweb install-gitweb
設定gitweb
sudo vim /etc/gitweb.conf
projectroot = "/Users/<user>/repositories"; GIT = "/usr/local/bin/git" #重要-git執行擋的位置
設定apache
sudo vim /etc/apache2/httpd.conf
Listen 8080 #Gitweb <VirtualHost *:8080> ServerName gitserver DocumentRoot /var/www/gitweb SetEnv GITWEB_CONFIG /etc/gitweb.conf <Directory /var/www/gitweb> Options ExecCGI +FollowSymLinks +SymLinksIfOwnerMatch AllowOverride All order allow,deny Allow from all AddHandler cgi-script cgi DirectoryIndex gitweb.cgi </Directory> </VirtualHost>
設定repo目錄權限
目錄權限如果不對,gitweb無法顯示專案
chmod -R 755 /Users/<user>/repositories
(MAC) Apache & MySQL Server
- 架站工具
- WinAppServ 2.5.9
- Apache 2.2.4 ,PHP 5.2.3 ,MySQL* 5.0.45 ,phpMyAdmin-2.10.2
- Linux(ubuntu)
- Xampp
- Mac OSX(ubuntu)Mamp:
1. 安裝完成後,進入Finder/應用程式/MAMP/,啟動MAMP。
(/MAMP/資料夾有停供Widget可使用)
2. 打開MAMP,可看到star server、open start page、preference
* start server:可啟動apache web server和mysql server。
* open start page:打開mamp設定狀態的網頁,也可從中連到mysql的web設定頁phpmyadmin。
* preference:內容有start/stop,ports,php,apache:四個標籤頁
- preference設定說明
+ start/stop:start url用來設定先前open start page的位置,原則上不動預設為(/mamp/)
+ ports:apache port改為80。
+ php:看個人需求設定。
* apache:document root用來設定web起始頁所在資料夾,為:/Users/Shiunyi/Sites
3. 打開finder,個人資料夾(ex:Shiunyi),裡面有資料夾-桌面、音樂、網站…,將其中”網站”資料夾拖到finder側邊欄,以後將編輯的網頁(ex:index.htm)放入其中,以後啟動apache web server後,即可從safari的url link:http://localhost/index.htm連到網頁。
4. Web Homepage Address:
- http://127.0.0.1/
- http://localhost/
- Web phpmyadmin:
5. http://127.0.0.1/phpmyadmin/
(Linux)(Ubuntu) Tools for Serial Port
screen
screen -h 1024 /dev/ttyS0 115200
Turn on output logging: -L
Copy mode: Ctrl+a,esc
Close session: Ctrl+a,k
Logging on/ off: Ctrl+a,H
** minicom**
設定minicom: ctri+a, o
Log: ctrl+a, l
(Linux)(Ubuntu) SSH server
安裝SSH Server
apt-get install openssh-server
或者
apt-get install ssh
設定SSH Server
SSH設定檔(ssh_config)
sudo gedit /etc/ssh/sshd_config
開啟SSH Port(更改ssh_config)
PORT 22
禁止root帳戶登入(更改ssh_config)
PermitRootLogin no
限定特定使用者群組ssh登入(更改ssh_config)
AllowGroups ssh
檢查SSH服務是否啟動
ps ax | grep ssh
Client端使用ssh連線至SSH server
ssh user@server_ip
Client端使用SSH Key連線至SSH Server
Client建立SSH Key (key1.pub與key1)
ssh-keygen
Client上傳SSH Key公鑰(key1.pub)
Client操作上傳
ssh-copy-id -i key1.pub user@server_ip
Server端操作,先藉由其他方法將公鑰複製至Server
cat /path/to/key1.pub >> /home/user1/.ssh/authorized_keys
注:不同使用者則為
cat /path/to/key1.pub >> /home/user2/.ssh/authorized_keys
注:單個使用者可有多組SSH Key
cat /path/to/key2.pub >> /home/user1/.ssh/authorized_keys
Server端,調整authorized_keys檔案權限
chmod 600 /home/user1/.ssh/authorized_keys
(Linux) Telnet service
Linux作業系統開啟Telnet服務
安裝xinted
sudo apt-get install xinetd telnetd
設定xinted config
sudo vi /etc/xinetd.conf
加入以下內容:
# Simple configuration file for xinetd# # Some defaults, and include /etc/xinetd.d/ defaults { # Please note that you need a log_type line to be able to use log_on_success # and log_on_failure. The default is the following : # log_type = SYSLOG daemon info instances = 60 log_type = SYSLOG authpriv log_on_success = HOST PID log_on_failure = HOST cps = 25 30 } includedir /etc/xinetd.d
sudo vi /etc/xinetd.d/telnet
加入以下內容:
# default: on # description: The telnet server serves telnet sessions; it uses # unencrypted username/password pairs for authentication. service telnet { disable = no flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/in.telnetd log_on_failure += USERID }
重啟網路服務
sudo /etc/init.d/xinetd restart
使用TELNET Client遠程登錄,即可進行非root用戶訪問
使用root登錄:
修改/etc/pam.d/login,下面一行註釋掉即可。
#auth required lib/security/pam_securetty.so
設定/etc/xinetd.d/telnet
service telnet { disable =no bind =192.168.1.2 only_from=192.168.1.0/24 #上面這兩行說明僅提供內部網段! Instance =UNLIMITED Nice =0 Flags =REUSE socket_type=stream wait =no user =root #server =/usr/sbin/telnetd server =/usr/sbin/in.telnetd server_args =-a none log_on_failure +=USERID }
service telnet { disable =no bind =140.116.142.196 only_from=140.116.0.0/16 no_access=140.116.32.{10,26} #上面三行設置外部較為嚴格的限制 instance =10 umask =022 nice =10 flags =REUSE socket_type=stream wait =no user =root #server =/usr/sbin/telnetd server =/usr/sbin/in.telnetd log_on_failure +=USERID }
加設防火牆,使用iptables:
針對193.16.0.0/24這個網段及61.xxx.xxx.xxx這個IP進行telnet開放,增加下面幾行規則:/sbin/iptables -A INPUT -p tcp -i eth0 -s 193.16.0.0/24 --dport 23 -j ACCEPT /sbin/iptables -A INPUT -p tcp -i eth0 -s 61.xxx.xxx.xxx --dport 23 -j ACCEPT /sbin/iptables -A INPUT -p tcp -i eth0 --dport 23 -j DROP
加設防火牆,使用/etc/hosts.allow(deny):
上面開放了193.16.0.0/24這個網段,如果只想讓其中的193.16.0.1~5進入,vi /etc/hosts.allow
in.telnetd:193.16.0.1,193.16.0.2,193.16.0.3,193.16.0.4,193.16.0.5:allow